Je voudrais écrire un script bash pour décoder une chaîne base64. Par exemple, je tape decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== et ça imprime Aladdin:open sesame et retourne à l'invite.
Jusqu'à présent, j'ai essayé un simple fichier bash contenant python -m base64 -d $1 mais cette commande attend un nom de fichier et non une chaîne. Existe-t-il une autre commande non interactive (pas nécessairement dans un module Python) que je peux exécuter à partir de la ligne de commande pour y parvenir, sans avoir à installer de packages supplémentaires? (Ou si je le fais, quelque chose de super-minimal.)
EDIT: Un exemple où la chaîne encodée en base64 se retrouve sur plusieurs lignes:
$ openssl enc -base64 <<< 'And if the data is a bit longer, the base64 encoded data will span multiple lines.'QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNvZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=$ openssl enc -base64 -d << EOF> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=> EOFAnd if the data is a bit longer, the base64 encoded data will span multiple lines.
Avec vos dépendances d'origine, il est possible de le faire avec une modification mineure de votre script d'origine:
echo $1 | python -m base64 -d
Si vous ne transmettez pas de nom de fichier, ce module python lit à partir de l'entrée standard. Pour y insérer le premier paramètre, vous pouvez utiliser echo $1 |.
openssl base64 -e <<< 'Welcome to openssl wiki' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kKopenssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'Welcome to openssl wiki
avertissement la longueur de ligne en base64 est limitée à 64 caractères par défaut dans openssl :
openssl base64 -e <<< 'Welcome to openssl wiki with a very long line that splits...' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo YXQgc3BsaXRzLi4uCg==openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='
>= RIEN !
pour pouvoir décoder une ligne base64 sans saut de ligne dépassant 64 caractères, utilisez l'option-A :
openssl base64 -d -A <<<'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='Welcome to openssl wiki with a very long line that splits...
Il est de toute façon préférable de diviser le résultat base64 en 64 lignes de caractères car l'option-A est boguée ( limite avec les fichiers longs).
J'ai eu quelques moments de tiraillement sur celui-ci parce que le base64 L'outil Linux et aussi le openssl peut décoder, en effet. Mais j'ai ce fichier encodé en base64 particulier qui décode à une valeur légèrement incorrecte. Les quelques octets correspondent, mais alors il y a cette présence de EF BF BD EF BF BD quand je regarde dans hexedit spectateur. Et puis la séquence d'octets suivante correspond à nouveau par rapport à la sortie attendue correctement décodée. Ces étranges séquences d'octets ont été insérées entre les deux, parfois comme EF BF BD seulement.
Pour résoudre le problème, je dois regarder comment l'expéditeur Java l'encode, puis j'ai créé un petit décodeur java base64. Et maintenant je peux décoder à la valeur attendue.