我得到了与加密功能相关的PHP
代码,该代码使用hash_mac
和bin2hex
。 逻辑很简单。我必须消化我的key
然后将二进制转换为十六进制字符串,仅此而已
这是我的PHP
$reqBody = '{
"citizenNo":"9990601821487",
"birthDate":"2520-02-24"
}'; // Put JSON body into reqBody parameter
$obj = json_decode($reqBody,true);
$transformBody = json_encode($obj); // Convert JSON into string without any whitespace
$secret = "idkfaiddqd";
$hashmac = hash_hmac('sha256', $transformBody, $secret, true);
$signature = bin2hex(hash_hmac('sha256', $transformBody, $secret, true));
echo "X-API-key : ",$signature,"n";
PHP
:28d28fd2cecc10a5d1e98a03dbec23844780d1609e7eaedba72e7c3a8e0e84e1n
我实现Python
版本
SECRET = "idkfaiddqd"
data = {
"citizenNo": "9990601821487",
"birthDate": "2520-02-24",
}
transform_body = str(data).replace(' ', '')
aaa = hmac.new(bytes(SECRET, 'utf-8'), transform_body.encode('utf-8'), hashlib.sha256).hexdigest()
Python
:2e3dff89bef78489c4f42e1e54a40b257e908aaa2d1aa46b5873acb53c51c9ac
问:
我错在哪里?
错误在transform_body
字符串中。
当你查看PHP字符串时,你可以看到这个:
{"citizenNo":"9990601821487","birthDate":"2520-02-24"}
python 字符串如下所示:
{'citizenNo':'9990601821487','birthDate':'2520-02-24'}
你看出区别了吗?Python使用单引号,PHP使用普通引号。
为了使 python 脚本完全像 PHP 脚本一样工作,您必须在 python 版本中用普通引号替换为单引号。
import hmac
import hashlib
SECRET = "idkfaiddqd"
data = {
"citizenNo": "9990601821487",
"birthDate": "2520-02-24",
}
transform_body = str(data).replace(' ', '')
transform_body = transform_body.replace(''', '"')
aaa = hmac.new(SECRET.encode(), transform_body.encode(), hashlib.sha256).hexdigest()
print(aaa)
输出:
28d28fd2cecc10a5d1e98a03dbec23844780d1609e7eaedba72e7c3a8e0e84e1
而且你在 php 脚本的输出中有一个额外的"n"。我想这应该是n
?