php hash_hmac加密中的注意点(坑)

在php进行hash_hmac加密的时候,需要注意加密字符串一定要用双引号而不是单引号(尤其是待加密字符串中包含换行\n等字符的时候)

错误的示例:

1
2
# 错误!!!
$signstr = 'POST\n*/*\napplication/json\nx-ca-key:20917555\n/artemis/api/resource/v1/org/advance/orgList';

正确的示例:

1
2
# 正确!!!
$signstr = "POST\n*/*\napplication/json\nx-ca-key:20917555\n/artemis/api/resource/v1/org/advance/orgList";

否则将影响加密签名的结果,另外也需要同样注意签名是否有要求返回二进制数据还是字符串数据,hash_hamc第四个参数为true,表示返回二进制数据,如果要返回字符串数据,需要设置为false

1
2
3
4
5
# 返回二进制
$signature = hash_hmac("sha256",$signstr,$appSecret,true)

# 返回字符串
$signature = hash_hmac("sha256",$signstr,$appSecret,true)