Ich versuche eine webhook from starling bank auf einem PHP 7.0.22 (Apache/2.4.6 (Red Hat Enterprise Linux)) Server zu authentifizieren.Java Digest Hash und PHP Hash sind unterschiedlich
Ich habe durch die Unterstützung gesagt, dass die folgenden Java-Code verwendet wird, um die
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);
}
}
Die Sharedsecret zu erzeugen verdauen ich bereits habe und die requestJson ich von der Webhook POST nehmen mit:
$requestJson=file_get_contents('php://input') ;
mein pHP-Code den Hash zu erzeugen, ist wie folgt:
$concatenated_string=$sharedSecret . json_encode($requestJson) ;
$generated_hash=base64_encode(hash('sha512', $concatenated_string));
Dies ergibt nicht den gleichen Hash. Während Hacking eine Antwort zu versuchen und zu finden, habe ich versucht, auch die folgenden:
$concatenated_string=$sharedSecret . $requestJson ;
und verschiedenen Hash-Typen und Optionen:
$generated_hash=base64_encode(hash('sha512', $concatenated_string, true))
$generated_hash=base64_encode(openssl_digest($concatenated_string, 'sha512')) ;