Ruby Digest :: MD5.base64digest和PHP之间的不同结果base64_encode
我没有使用过Ruby,只能使用php。我需要帮助。Ruby Digest :: MD5.base64digest和PHP之间的不同结果base64_encode
我有红宝石代码编码字符串这样的:
str = '123';
arr = str.bytes
p Digest::MD5.base64digest(arr.pack('C*')) # ICy5YqxZB1uWSwcVLSNLcA==
我需要做同样的PHP,并得到了相同的结果。我的例子
$str = '123';
$bytes = unpack('C*', $str);
$pack = pack('C*', implode(', ', $bytes));
echo base64_encode(md5($pack)); // YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI=
为什么结果不一样。感谢帮助。
作为它的解包,然后重新打包不需要的字节,但没有保持代码原样。
在PHP pack要求每个数组参数都要传递,所以你需要重新打包一个循环中的每个参数。
<?php
$str = 123;
$bytes = unpack('C*', $str);
$pack = null;
foreach ($bytes as $arg) $pack .= pack('C*', $arg);
或者在PHP> 5.6中,您可以使用内联参数解包。 ...
$str = 123;
$bytes = unpack('C*', $str);
$pack = pack('C*', ...$bytes);
那么最后一个问题是因为RUBYS base64digest维持消化状态,你还需要使用MD5的第二PARAM raw_output做同样的。
如果可选raw_output设置为TRUE,那么MD5摘要 而是返回原始的二进制格式以16
$str = 123;
echo base64_encode(md5($str, true));
长度所以你完成移植的代码看起来像:
$str = 123;
$bytes = unpack('C*', $str);
$pack = pack('C*', ...$bytes);
echo base64_encode(md5($pack, true)); // ICy5YqxZB1uWSwcVLSNLcA==
或者只是。
<?php
$str = 123;
echo base64_encode(md5($str, true)); // ICy5YqxZB1uWSwcVLSNLcA==
对不起,对于迟到的答案,我试着你的代码,它工作得很好!万分感谢!!! – alexandernoa
np,很高兴帮助 –
您是否看到我的答案?希望它有帮助。 –
是的,这是帮助!谢谢。 – alexandernoa