【发布时间】:2017-09-07 10:06:18
【问题描述】:
我正在尝试在 PHP 7.0.22 (Apache/2.4.6 (Red Hat Enterprise Linux)) 服务器上验证 webhook from starling bank。
支持人员告诉我,正在使用以下 java 代码生成摘要
private String calculateSignature(String sharedSecret, String requestJson) {
try {
String contentToDigest = sharedSecret + requestJson;
MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
byte[] digest = messageDigest.digest(contentToDigest.getBytes());
return Base64.getEncoder().encodeToString(digest);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("Error calculating digest for payload [" + requestJson + "]", e);
}
}
我已经拥有的 sharedSecret 和我从 webhook POST 中获取的 requestJson 使用:
$requestJson=file_get_contents('php://input') ;
我的生成哈希的php代码如下:
$concatenated_string=$sharedSecret . json_encode($requestJson) ;
$generated_hash=base64_encode(hash('sha512', $concatenated_string ));
这不会给出相同的哈希值。在尝试寻找答案的同时,我还尝试了以下方法:
$concatenated_string=$sharedSecret . $requestJson ;
以及不同的哈希类型和选项:
$generated_hash=base64_encode(hash('sha512', $concatenated_string, true ))
$generated_hash=base64_encode(openssl_digest($concatenated_string, 'sha512')) ;
【问题讨论】:
标签: java php hash base64 sha512