2017-09-07 4 views
0

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')) ; 

Répondre

1

base64_encode et hash font effectivement la même chose dans ce cas :

https://stackoverflow.com/a/11195855/3323777

Vous devez spécifier troisième argument TRUE à votre php code pour utiliser la version java:

raw_output - Réglage TRUE retourne sous forme de données brutes de sortie, sinon la valeur de retour est codé binhex.

http://php.net/manual/ru/function.openssl-digest.php

J'ai couru vos deux extraits sur java et php et trouvé pas la différence lors de l'encodage d'une chaîne « test ». Je vous conseille de sortir les charges utiles json à deux fichiers sur les deux environnements et d'utiliser diff pour les comparer.