PHP生成SHA256 HMAC哈希签名与Postman JS脚本结果不一致怎么解决
错误原因
你的PHP代码逻辑和Postman预请求脚本的运算逻辑不匹配,多执行了一次多余的SHA256哈希步骤:
- Postman JS逻辑:直接对原始消息
mymessage使用密钥myapipkey做HMAC-SHA256运算,直接输出结果 - 你的PHP逻辑:先对原始消息
mymessage做普通SHA256哈希得到哈希字符串,再对这个哈希字符串使用密钥做HMAC-SHA256运算,两次输入的运算内容完全不同,自然结果不一致
正确PHP实现
写法1:直接调用hash_hmac简写(推荐,代码更简洁)
<?php $data_to_hash = "mymessage"; $key = "myapipkey"; $result = hash_hmac('sha256', $data_to_hash, $key); echo $result;
写法2:使用hash_init流程(和你原有写法逻辑对齐的修正版)
<?php $data_to_hash = "mymessage"; $key = "myapipkey"; // 直接初始化HMAC-SHA256上下文,不需要提前对原始消息做哈希 $ctx = hash_init('sha256', HASH_HMAC, $key); hash_update($ctx, $data_to_hash); $result = hash_final($ctx); echo $result;
注意:如果实际使用中消息或密钥包含中文等非ASCII字符,需要确保PHP和JS两端的字符串编码一致(推荐统一使用UTF-8),否则也会出现签名不一致的问题。
内容的提问来源于stack exchange,提问作者albertyaz
相关产品推荐
相关产品推荐

