2016-08-10 1 views
0

Quel serait le moyen le plus simple de convertir le texte produit par des utilitaires tels que sha512sum en un fichier binaire? Je voudrais convertir une chaîne hexadécimale comme 77f4de214a5423e3c7df8704f65af57c39c55f08424c75c0931ab09a5bfdf49f5f939f2caeff1e0113d9b3d6363583e4830cf40787100b750cde76f00b8cd3ec (exemple produit par sha512sum) en un fichier binaire (64 octets de long), dans lequel la valeur de chaque octet serait équivalente à une paire de lettres/chiffres de la chaîne. Je suis à la recherche d'une solution qui nécessiterait une quantité minimale d'outils, donc je serais heureux si cela peut être fait facilement avec bash, sed ou un utilitaire de coreutils. Je préfère éviter xxd, car cela ne semble pas gérer une telle chaîne (je devrais ajouter "adresses" et quelques espaces).Convertir une chaîne de hachage en fichier binaire

J'ai besoin du hachage en tant que fichier binaire, pour le convertir en un fichier objet et un lien avec l'application que j'écris. S'il y a une autre façon d'intégrer une telle chaîne (sous une forme binaire!) Dans une application (via un tableau ou autre), c'est aussi une solution pour moi.

Répondre

4

Un peu de sed et echo peut faire:

for i in $(echo 77f4de214a5423e3c7df8704f65af57c39c55f08424c75c0931ab09a5bfdf49f5f939f2caeff1e0113d9b3d6363583e4830cf40787100b750cde76f00b8cd3ec | sed 's/../& /g'); do 
    echo -ne "\x$i" 
done > output.bin 

La commande est sed divise la chaîne hexagonale en octets et le echo montre comme caractère hexadécimal.

ou sous une forme plus courte avec sha512sum sortie, comme le suggère le commentaire:

echo -ne "$(sha512sum some-file.txt | sed 's/ .*$//; s/../\\x&/g')" 
+1

grep -o '[0-9a-f] \ {128 \}' | echo -en $ (sed 's/\ ([0-9a-f] \ {2 \} \)/\\ x \ 1/g')> hash.bin'. Semble un peu plus court que la construction en boucle. –

+0

vous avez raison, répondez à jour – oliv

1

Si vous avez noeud:

node -e "var fs = require('fs'); fs.writeFileSync('binary', new Buffer('77f4de214a5423e3c7df8704f65af57c39c55f08424c75c0931ab09a5bfdf49f5f939f2caeff1e0113d9b3d6363583e4830cf40787100b750cde76f00b8cd3ec', 'hex'))" 
1

Que diriez-vous perl:

<<<77f4de214a5423e3c7df8704f65af57c39c55f08424c75c0931ab09a5bfdf49f5f939f2caeff1e0113d9b3d6363583e4830cf40787100b750cde76f00b8cd3ec \ 
perl -e 'print pack "H*", <STDIN>' > hash.bin 
1

Si vous avez openssl dans votre système et que vous voulez un hachage sha512 sous forme binaire, vous pouvez utiliser ceci: J'ai réussi à faire cela sans boucle: `sha512sum somefile.ext |

openssl dgst -sha512 -binary somefile.txt