【发布时间】:2016-06-25 11:53:25
【问题描述】:
我有一个 javascript 函数,我正在尝试将其转换为 PHP,它使用 CryptoJS 库,特别是 components/enc-base64-min.js 和 rollups/md5.js。他们可以找到here。
就是这段代码
// Let's say str = 'hello';
var md5 = CryptoJS.MD5(str);
md5 = md5.toString(CryptoJS.enc.Base64);
// md5 outputs "XUFAKrxLKna5cZ2REBfFkg=="
我假设str 变量是使用 md5 散列然后编码为 Base64,所以我尝试了这个简单的代码
$md5 = md5($str);
$md5 = base64_encode($md5);
// md5 outputs "MmZjMGE0MzNiMjg4MDNlNWI5NzkwNzgyZTRkNzdmMjI="
然后我尝试验证两个输出,看起来 JS 输出甚至不是有效的 Base64 字符串。
为了进一步理解,我试图从W3Schools 中寻找toString() 参数,但这对我来说没有意义,根据引用,参数应该是整数(2、8 或 16),那么为什么是用CryptoJS.enc.Base64 代替吗?
我的目标不是使用 JS 生成有效的 base64 编码字符串,而是使用 PHP 生成相同的输出。
【问题讨论】:
-
MD5 产生一个 16 字节的二进制输出。 Base 64 将每个 6 位编码为一个 8 位 ASCII 字符。 16*8/6 = 21.3 字节,Base64 将输出填充为 4 字节倍数。这个 MD5 输出 base64 编码将产生 24 字节的输出,这与第一个示例一致。第二个示例产生 44 字节的输出,因此不正确。
-
@zaph 感谢您的详细说明
标签: javascript php cryptography cryptojs