Si vous exécutez cette commande sur votre Unix
echo -n "foo" | openssl dgst -sha1
Vous obtiendrez cette sortie:
(stdin)= 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
(suivi d'une nouvelle ligne).
Comment puis-je forcer openssl à ne pas afficher le (stdin)=
préfixe et éviter la nouvelle ligne de fin?
Réponses:
Le format binaire brut n'ajoute aucune sortie étrangère.
Sortie en binaire puis convertissez en hexadécimal:
Vous donnera ceci:
Cette méthode devrait être évolutive au cas où quelqu'un déciderait de modifier à nouveau le format de sortie textuel. Je suis sûr qu'ils fixeront le préfixe pour qu'il soit "SHA1 (stdin) =" pour être cohérent avec celui d'une entrée de fichier.
Je ne peux pas croire qu'ils aient changé ça! Je me demande combien de scripts ont été cassés.
la source
-c 256
option pour l'étendre à 256 octets par ligne.J'observe ce comportement sous OpenSSL 1.0.0e sur Ubuntu 11.10, alors que OpenSSL 0.9.8k et 0.9.8t ne produisent que le hachage. La ligne de commande d'OpenSSL n'est pas conçue pour être flexible, c'est plutôt un moyen rapide et sale d'effectuer des calculs cryptographiques à partir de la ligne de commande.
Si vous souhaitez utiliser OpenSSL, filtrez la sortie:
Sous Linux (avec les outils GNU ou BusyBox), vous pouvez utiliser
sha1sum
ce qui ne nécessite pas l'installation d'OpenSSL et a un format de sortie stable. Il imprime toujours un nom de fichier, alors retirez-le.Sur les systèmes BSD, y compris OSX, vous pouvez utiliser
sha1
.Tous ces éléments génèrent la somme de contrôle en hexadécimal suivi d'une nouvelle ligne. Le texte sous les systèmes Unix consiste toujours en une séquence de lignes, et chaque ligne se termine par un caractère de nouvelle ligne. Si vous stockez la sortie de la commande dans une variable shell, la nouvelle ligne finale est supprimée.
Si vous devez diriger l'entrée dans un programme qui nécessite une somme de contrôle sans retour à la ligne final (ce qui est vraiment rare), supprimez le retour à la ligne.
la source
Voici une autre alternative:
la source
Voici un moyen de le faire en utilisant les fonctions intégrées bash au lieu des tuyaux, awk, sed, tr, cut, etc.:
la source