2011-01-03 28 views
22

Tôi cần mã hóa md5 băm thành cơ số 64. Vấn đề là nếu đưa ra lệnh md5sum vào lệnh base64, nó được coi là văn bản chứ không phải là dữ liệu thập lục phân. Làm thế nào để quản lý nó? Lệnh Base64 không có tùy chọn để đặt đầu vào của nó dưới dạng số thập lục phân.Làm thế nào để mã hóa tổng md5 vào base64 trong BASH

Cảm ơn bạn đã được trợ giúp.

Trả lời

42

Sử dụng openssl dgst -md5 -binary thay vì md5sum. Nếu bạn muốn, bạn có thể sử dụng nó để mã hóa base64 là tốt, để chỉ sử dụng một chương trình cho tất cả các sử dụng.

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

(openssl md5 thay vì openssl dgst -md5 làm việc quá, nhưng tôi nghĩ rằng nó tốt hơn để được rõ ràng)

+0

Cảm ơn nhiều. Nó hoạt động tốt. –

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

Trong busybox bạn có thể không có thể sử dụng cho các cú pháp vòng lặp. Dưới đây unhex() được thực hiện với một vòng lặp trong khi thay vì:

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

Bạn cũng có thể sử dụng xxd (đi kèm với vim) để giải mã các hex, trước khi đi qua nó để base64:

(echo 0:; echo -n foo | md5sum) | xxd -rp -l 16 | base64 
Các vấn đề liên quan