Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
md5字符串的base64_编码-php与javascript问题_Javascript_Php - Fatal编程技术网

md5字符串的base64_编码-php与javascript问题

md5字符串的base64_编码-php与javascript问题,javascript,php,Javascript,Php,我遇到一个API问题,该API要求我运行字符串的BASE64和MD5。虽然我创建的JAVASCRIPT代码可以很好地与这个API配合使用,但我需要它在PHP中,我得到了答案 在测试该问题时,我得出了一个结论,即问题在于base64_encode函数在PHP中的工作方式不同,这导致了问题。我附上一个代码,将演示它 var CryptoJS = require("crypto-js"); var testStr = 'hello world!'; console.log(String(CryptoJ

我遇到一个API问题,该API要求我运行字符串的BASE64和MD5。虽然我创建的JAVASCRIPT代码可以很好地与这个API配合使用,但我需要它在PHP中,我得到了答案

在测试该问题时,我得出了一个结论,即问题在于base64_encode函数在PHP中的工作方式不同,这导致了问题。我附上一个代码,将演示它

var CryptoJS = require("crypto-js");
var testStr = 'hello world!';
console.log(String(CryptoJS.SHA256(testStr))); # outputs 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9
console.log(CryptoJS.enc.Base64.stringify( CryptoJS.SHA256(testStr) )); # outputs dQnlvaDHYtK6x/kNdYtbImP6Acy8VCq1498WO+CObKk=

您的JavaScript代码正在对原始二进制哈希进行编码,但您的PHP代码正在对哈希的小写十六进制表示进行编码,不管您的默认编码是什么

您想使用
hash()
函数()的
raw\u输出
参数:


第一个示例是base-64编码字节
75,09,e5,…
,而第二个示例是编码字符串的(大概)utf-8字节表示形式
“7509e5…”
。我刚刚确认,如果不使用CryptoJS base 64 stringify,只需使用window.btoa(CryptoJS.SHA256(testStr))即可,输出与PHP相同与Andrew的建议不同,如果使用
hash('sha256',$testStr,true)
它将为这两个函数生成第一个结果(较小的结果)。这会导致
hash
方法返回字节数组而不是字符串。
<?php
$testStr = 'hello world!';
echo base64_encode(hash('sha256', $testStr, true));
// dQnlvaDHYtK6x/kNdYtbImP6Acy8VCq1498WO+CObKk=