J'essaye d'authentifier un webhook from starling bank sur un serveur PHP 7.0.22 (Apache/2.4.6 (Red Hat Enterprise Linux)).Java Digest Hash et PHP Hash sont différents
J'ai été informé par le soutien que le code Java suivant est utilisé pour générer le digérer
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);
}
}
Le sharedSecret je l'ai déjà et requestJson je prends du POST webhook utilisant:
$requestJson=file_get_contents('php://input') ;
mon code php pour générer le hachage est la suivante:
$concatenated_string=$sharedSecret . json_encode($requestJson) ;
$generated_hash=base64_encode(hash('sha512', $concatenated_string));
Cela ne donne pas le même hachage. Alors que le piratage pour essayer de trouver une réponse, je l'ai aussi essayé les éléments suivants:
$concatenated_string=$sharedSecret . $requestJson ;
et différents types de hachage et options:
$generated_hash=base64_encode(hash('sha512', $concatenated_string, true))
$generated_hash=base64_encode(openssl_digest($concatenated_string, 'sha512')) ;