使用PHP生成与CryptoJS.enc.Base64相同的结果

时间:2016-06-25 11:53:26

标签: javascript php cryptography cryptojs

我有一个javascript函数,我正在尝试转换为PHP,它使用CryptoJS库,特别是components/enc-base64-min.jsrollups/md5.js。他们可以找到here

就是这段代码

// Let's say str = 'hello';

var md5 = CryptoJS.MD5(str);
md5 = md5.toString(CryptoJS.enc.Base64);
// md5 outputs "XUFAKrxLKna5cZ2REBfFkg=="

我假设使用md5对str变量进行哈希处理,然后编码为Base64,所以我尝试了这个简单的代码

$md5 = md5($str);
$md5 = base64_encode($md5);
// md5 outputs "MmZjMGE0MzNiMjg4MDNlNWI5NzkwNzgyZTRkNzdmMjI="

然后我尝试验证两个输出,看起来JS输出甚至不是有效的Base64字符串。

为了进一步理解,我试图从W3Schools中查找toString()参数,但它对我没有意义,因为根据参考,参数应该是一个整数(2,8或16) ),那么为什么要使用CryptoJS.enc.Base64

我的目标不是使用JS生成有效的base64编码字符串,而是使用PHP生成相同的输出。

1 个答案:

答案 0 :(得分:4)

带有单个参数的php' md5()将md5哈希作为十六进制字符串返回。

相反,您希望将原始字节编码到Base64中,因此您必须将可选参数$raw_output也传递给md5()(设置为true

$md5 = md5($str, true);

http://php.net/manual/it/function.md5.php