2011-01-03 7 views
22

base64에 md5 해시를 인코딩해야합니다. md5sum 명령의 출력을 base64 명령에 제공하면 텍스트로 간주되며 16 진수 데이터로 간주되지 않습니다. 그것을 관리하는 방법? Base64 명령에는 입력을 16 진수로 설정하는 옵션이 없습니다.BASH에서 md5 sum을 base64로 인코딩하는 방법

도움 주셔서 감사합니다.

답변

42

md5sum 대신 openssl dgst -md5 -binary을 사용하십시오. 원하는 경우 모든 용도로 하나의 프로그램 만 사용하여 base64 인코딩에 사용할 수도 있습니다.

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

(openssl md5 대신 openssl dgst -md5도 작동하지만, 나는 명시 적으로 더 좋은 생각) 당신은 루프 구문 사용하지 못할 수도 비지 박스에서

+0

감사를 많이. 그것은 잘 작동합니다. –

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

. 64 기수로 전달하기 전에,

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

또한 xxd 사용할 수는 (VIM 함께 제공) 육각을 디코딩 : unhex 아래() 대신 while 루프로 구현

(echo 0:; echo -n foo | md5sum) | xxd -rp -l 16 | base64 
관련 문제