我試圖在PHP 7.0.22(Apache/2.4.6(紅帽企業Linux))服務器上驗證webhook from starling bank。Java Digest哈希和PHP哈希是不同的
我已經被告知通過支持,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和requestJson我從網絡掛接POST採取:
$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')) ;