Hogyan lehet dekódolni egy base64-karakterláncot a parancssorból?

326

Egy bash-parancsfájlt szeretnék írni egy base64 karakterlánc dekódolásához. Például írtam bedecode QWxhZGRpbjpvcGVuIHNlc2FtZQ== -ot, és kinyomtatja aAladdin:open sesame -ot, és visszatér a prompthoz.

Eddig kipróbáltam egy egyszerű bash fájlt, amelypython -m base64 -d -ot tartalmaz, de ez a parancs elvárja, hogy egy fájlnév ne legyen string. Van-e még egy nem interaktív parancs (nem feltétlenül egy Python modulban), amelyet a parancssorból futtathatok e cél elérése érdekében, anélkül, hogy extra csomagokat kellene telepítenie? (Vagy ha igen, valami szuper minimális.)

    
készlet d3vid 21.08.2012 14:17
forrás

7 válasz

489

Csak használja abase64 programot acoreutils csomagból:

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

Vagy az újsoros karakter felvétele

echo 'echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode'

kimenet (újsoros):

Aladdin:open sesame
    
válasz adott January 21.08.2012 15:34
forrás
75

Az openssl kódolhatja és dekódolja a base64-et

$ openssl enc -base64 <<< 'Hello, World!'
SGVsbG8sIFdvcmxkIQo=
$ openssl enc -base64 -d <<< SGVsbG8sIFdvcmxkIQo=
Hello, World!

EDIT: Olyan példa, ahol az alap 64 kódolt string több sorra ér véget:

$ openssl enc -base64 <<< 'And if the data is a bit longer, the base64 encoded data will span multiple lines.'
QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
$ openssl enc -base64 -d << EOF
> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
> EOF
And if the data is a bit longer, the base64 encoded data will span multiple lines.
    
válasz adott geirha 22.08.2012 00:23
forrás
32

Itt megy!

Adja hozzá az alábbiakat a~/.bashrc fájl aljára:

decode () {
  echo "" | base64 -d ; echo
}

Most nyisson meg egy új terminált, és futtassa a parancsot.

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Ez pontosan azt teszi, amit kérdezett a kérdésedben.

    
válasz adott SirCharlo 21.08.2012 15:39
forrás
18

Az eredeti függőségekkel ezt az eredeti szkript kisebb módosításával teheted meg:

echo  | python -m base64 -d

Ha nem adja át a fájlnevet, akkor a python modul a szabványos bemenetről olvas. Az első paraméter beillesztéséhez használja aecho | értéket.

    
válasz adott AmanicA 05.10.2012 14:15
forrás
12

A base64 parancssort a linkben adtam meg. Ezért figyelmeztetést adok az openssl base64 dekódolásakor:

 openssl base64 -e <<< 'Welcome to openssl wiki'

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

Figyelmeztetés a base64 vonal hossza alapértelmezésben 64 karakterre korlátozódik openssl :

 openssl base64 -e <<< 'Welcome to openssl wiki with a very long line
 that splits...'

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='

= > NINCS!

annak érdekében, hogy dekódolhasson egy base64 vonalat vonalkód nélkül, amely meghaladja a 64 karakter használatát -A opció:

openssl base64 -d -A <<<
'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='

Welcome to openssl wiki with a very long line that splits...

Ez mindenesetre jobb, ha ténylegesen megosztotta a base64 eredményt 64 karakteres sorokban, mivel -A lehetőség a BUGGY (limit hosszú fájlokkal).

    
válasz adott philippe lhardy 23.03.2013 19:23
forrás
4

perl

használata
perl -MMIME::Base64 -ne 'printf "%s\n",decode_base64($_)' <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

Vagy ugyanaz apython

python -m base64 -d <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
    
válasz adott A.B. 02.07.2015 22:22
forrás
2

Csak azért, hogy újabb módot adjon meg:

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'
    
válasz adott erjoalgo 15.06.2016 08:27
forrás