Perl中md5函数的PHP模拟是什么?

时间:2015-09-18 07:34:07

标签: php perl

我有一个Perl脚本,我需要将其转换为PHP。 什么是Perl中md5函数的PHP模拟?

Perl脚本:

$hash  = md5($str1, $str2); 

PHP脚本:

 $hash  = md5($str1.$str2);

我在$hash中有不同的值。 如何在PHP中获得$hash的相同值?

THX。

2 个答案:

答案 0 :(得分:5)

看起来你正在使用二进制格式的输出的perl版本:

http://perldoc.perl.org/Digest/MD5.html

md5($data,...)
  

此函数将连接所有参数,计算MD5摘要   这个"消息",并以二进制形式返回。返回的字符串   将是16个字节长。

在PHP中尝试:

$hash  = md5($str1.$str2, true);

有关详细信息,请参阅php docs

答案 1 :(得分:1)

只是

$hash  = md5($str1.$str2, true);

你声称它不等同,但以下显示它是:

$ cat x.pl
use Digest::MD5 qw( md5 );

my $str1 = join '', map chr, 0x00..0x7F;
my $str2 = join '', map chr, 0x80..0xFF;

print md5($str1, $str2);

$ perl x.pl | od -t x1
0000000 e2 c8 65 db 41 62 be d9 63 bf aa 9e f6 ac 18 f0
0000020

$ cat x.php
<?php

$str1 = join('', array_map("chr", range(0x00, 0x7F)));
$str2 = join('', array_map("chr", range(0x80, 0xFF)));

echo md5($str1.$str2, true);

?>

$ php x.php | od -t x1
0000000 e2 c8 65 db 41 62 be d9 63 bf aa 9e f6 ac 18 f0
0000020

$ diff -q <( perl x.pl ) <( php x.php ) && echo identical || echo different
identical