代码片段:
.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