2011-01-03 7 views
22

Ich muss md5-Hash zu Base 64 codieren. Das Problem ist, dass, wenn Ausgabe von md5sum Befehl zu base64 Befehl geben, wird es als Text und nicht als hexadezimale Daten betrachtet. Wie man es handhabt? Der Base64-Befehl hat keine Option, seine Eingabe als Hexadezimalzahl festzulegen.Wie codiere ich MD5-Summe in Base64 in BASH

Danke für jede Hilfe.

Antwort

42

Verwenden Sie openssl dgst -md5 -binary anstelle von md5sum. Wenn Sie möchten, können Sie es auch für base64-encode verwenden, um nur ein Programm für alle Anwendungen zu verwenden.

echo -n foo | openssl dgst -md5 -binary | openssl enc -base64

(openssl md5 statt openssl dgst -md5 funktioniert auch, aber ich denke, es ist besser, explizit zu sein)

+0

Dank viel. Es funktioniert gut. –

0
unhex() 
{ 
    for ((b=0; b<${#1}; b+=2)) 
    do 
     printf "\\x${1:$b:2}"; 
    done 
} 

md5sum2bytes() 
{ 
    while read -r md5sum file; do 
     unhex $md5sum; 
    done 
} 

md5sum inputfile | md5sum2bytes | base64 
0

In Busybox könnten Sie nicht in der Lage sein, für Loop-Syntax zu verwenden. Unterhalb unhex() wird stattdessen mit einer while-Schleife implementiert:

unhex() 
{ 
    b=0; 
    while [ $b -lt ${#1} ]; 
    do 
     printf "\\x${1:$b:2}"; 
     b=$((b += 2)); 
    done 
} 

md5sum2bytes() 
{ 
    while read -r md5sum file; do 
     unhex $md5sum; 
    done 
} 

md5sum inputfile | md5sum2bytes | base64 
3

Sie auch (kommt mit vim) verwenden xxd können die hex zu entschlüsseln, bevor es zu base64 vorbei:

(echo 0:; echo -n foo | md5sum) | xxd -rp -l 16 | base64 
Verwandte Themen