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

问题描述 投票:0回答:1

我有一个 javascript 函数,我正在尝试将其转换为 PHP,它使用 CryptoJS 库,特别是

components/enc-base64-min.js
rollups/md5.js
。您可以在这里找到它们。

里面有这段代码

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

javascript php cryptography cryptojs
1个回答
5
投票

php 的

md5()
带有单个参数,返回 md5 哈希值 作为十六进制字符串

相反,您需要原始字节(稍后编码为 Base64)

这是手册中的

md5()
函数定义:

md5(string $str, bool $raw_output = false): string

您还必须将可选参数

$raw_output
传递给
md5()

$md5 = md5($str, true);

请参阅手册了解完整说明...

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

© www.soinside.com 2019 - 2024. All rights reserved.