2013-06-05 5 views
2

Мне нужно разместить какую-либо форму в CGI (Perl), и один из входов требует хеша, закодированного в base64 md5. Образец предоставляется той сторона, которая должна получить, работает в PHP следующим образом:Как кодировать base64 md5 в CGI?

$hash = base64_encode(md5($data1."|". $data2."|". $data3)); 

Чтобы заставить его работать в CGI Я использую следующий код:

use Digest::MD5 qw(md5_base64); 
my $base64_digest = md5_base64($data1."|". $data2."|". $data3); 

Но закодированную строку на исходе другой, если я делаю это в PHP. Похоже, я делаю это неправильно в CGI. Как правильно закодировать его?


$ echo '<? echo base64_encode(md5("abc|def|ghi")), "\n"; ?>' | php 
MzJjNDcyZmE0MjI3MWYyYWE0YTg1MWZkMmM1NzRkODc= 

$ perl -MDigest::MD5=md5_base64 -E'say md5_base64("abc|def|ghi");' 
MsRy+kInHyqkqFH9LFdNhw 

ответ

2
Perl        PHP 
------------------------------- ------------------------------ 
md5($string)      md5($string, 1) 
md5_hex($string)     md5($string, 0) 
md5_base64($string)    base64_encode(md5($string, 1)) 
encode_base64(md5_hex($string)) base64_encode(md5($string, 0)) WASTEFUL 

РНР md5 производит шестигранные хэша, сродни D :: MD5-х md5_hex.

$ echo '<? echo md5("abc|def|ghi"), "\n"; ?>' | php 
32c472fa42271f2aa4a851fd2c574d87 

$ perl -E' 
    use Digest::MD5 qw(md5_hex); 
    say md5_hex("abc|def|ghi");' 
32c472fa42271f2aa4a851fd2c574d87 

base64 передает ту же информацию меньше символов.

$ echo '<? echo base64_encode(md5("abc|def|ghi", 1)), "\n"; ?>' | php 
MsRy+kInHyqkqFH9LFdNhw== 

$ perl -E' 
    use Digest::MD5 qw(md5_base64); 
    say md5_base64("abc|def|ghi");' 
MsRy+kInHyqkqFH9LFdNhw 

$ perl -E' 
    use Digest::MD5 qw(md5); 
    use MIME::Base64 qw(encode_base64); 
    say encode_base64(md5("abc|def|ghi"));' 
MsRy+kInHyqkqFH9LFdNhw== 

(Снятие задней == не изменяет значение.)

Что вы сейчас делаете в PHP очень расточительно. Это намного дольше, чем требуется, и требует дополнительного времени процессора для его создания.

$ echo '<? echo base64_encode(md5("abc|def|ghi")), "\n"; ?>' | php 
MzJjNDcyZmE0MjI3MWYyYWE0YTg1MWZkMmM1NzRkODc= 

$ perl -E' 
    use Digest::MD5 qw(md5_hex); 
    use MIME::Base64 qw(encode_base64); 
    say encode_base64(md5_hex("abc|def|ghi"), "");' 
MzJjNDcyZmE0MjI3MWYyYWE0YTg1MWZkMmM1NzRkODc= 
+0

Ваше решение отлично работает! Благодарим вас за подробное объяснение и предложения. – Alepri

Смежные вопросы