PHP base64_encode结果与 JavaScript 编码结果不同



代码片段:

.php:

$shaVal = '59bc125840733ea828f42e276661b01e177f1414';
$enc = base64_encode(pack('H*', $shaVal));
echo $enc;
//prints => WbwSWEBzPqgo9C4nZmGwHhd/FBQ=

在Javascipt中,我使用了buffer npm模块

let Buffer = require('buffer').Buffer;
let shaVal = '59bc125840733ea828f42e276661b01e177f1414';
//function similar to php's pack() and returns binary data 
let bData = Buffer.from(shaVal, 'hex').toString();
console.log('bData ', bData)
//encode with base64
let val64 = Buffer.from(bData, 'binary').toString('base64');
console.log('base 64 encode ', val64)
//prints => Wf0SWEBzPv0o/S4nZmH9Hhd/FBQ=

如何获得由 php 打印的完全相同的输出?

注意:两个选项都将二进制数据显示为 Y X@s> ( .'fa

这是因为 PHP pack 返回字符串,其中 javascript 缓冲区返回 Array。

这个答案可能会有所帮助:https://stackoverflow.com/a/41962257/3086531

最新更新