javascript - 使用 PHP 产生与 CryptoJS.enc.Base64 相同的结果

标签 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=="

我假设 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 生成相同的输出。

最佳答案

带有单个参数的 php 的 md5() 返回 md5 散列作为十六进制字符串

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

$md5 = md5($str, true);

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

关于javascript - 使用 PHP 产生与 CryptoJS.enc.Base64 相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38028225/

相关文章:

javascript - 如何使用 angularJS 执行类似 jQuery 的 $ ("#formID").submit() 事件?

javascript - 像 gumroad.com 中的 JQuery UI 翻转文本

cryptography - 数字签名签名者姓名未显示

javascript - 从子 Angular 函数更新父 Controller 值

javascript - Angular.Js 中 Array.data 的定义是什么

javascript - 如何 chop 太长的字符串值?

php - 将字符串转换为整数时不一致,当字符串为十六进制时,前缀为 '0x'

php - 使用 PHP 内置网络服务器自动打开网站

cryptography - CDSA在OS X Lion中已弃用。用什么代替它?

encryption - 能够分解大量数字如何决定流行加密算法的安全性?