J'essaie de générer la même signature Hmac-SHA256 en Python que dans mon template Java. Mais le script Python ne génère pas la même sortie. Je ne peux pas trouver mon erreur. Quelqu'un peut-il m'aider?Java et Python génèrent différentes sorties Hmac-SHA256
Java
public class Main {
public static void main(String[] args) {
String paramString = "teststring";
calculateSignature(hash(paramString));
}
private static byte[] hash(String paramString)
{
MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
localMessageDigest.update(paramString.getBytes("UTF-8"));
byte[] paramByte = localMessageDigest.digest();
System.out.println("Hash: " + DatatypeConverter.printBase64Binary(paramByte));
return paramByte;
}
public static void calculateSignature(byte[] paramArrayOfByte)
{
String Algor = "HmacSHA256";
Mac localMac = Mac.getInstance(Algor);
byte [] key = "secretkey".getBytes();
localMac.init(new SecretKeySpec(key, Algor));
paramArrayOfByte = localMac.doFinal(paramArrayOfByte);
System.out.println("Signature: " + DatatypeConverter.printBase64Binary(paramArrayOfByte));
}
}
Hash: PIcn4BmkK0RGZ6WHtgASUb7K2ruza/7YCHqSwYiC0RE =
Signature: X8V4RA7qaoVGz5K2l61gAXNPuLkAI7NZ9/9d7WnblbA =
Python
# -*- coding: utf-8 -*-
import hashlib
import base64
import hmac
secretkey = 'secretkey'
stringToSign = "teststring"
def hash(paramstring):
x = base64.b64encode(hashlib.sha256(paramstring).digest())
print('Hash: ' + x)
return x
def calculate_signature(hashvalue):
x = base64.b64encode(hmac.new(secretkey, hashvalue, hashlib.sha256).digest())
print('Signature: ' + x)
calculate_signature(hash(stringToSign))
Hash: PIcn4BmkK0RGZ6WHtgASUb7K2ruza/7YCHqSwYiC0RE =
Signature: NE8RtuFsOtafWrwDdlzILMgqCDm2huJ9A3IO6iy44Jc =
Il est juste. Le module Hmac de Java nécessite une entrée codée en octets. Aussi, je dois ajuster le code python au code java. Quel est le problème dans le code python? – user2534685
Pourquoi avez-vous besoin d'ajuster le code python? Avec ces changements, python et java donnent le même résultat. – alpert
Je dois écrire le code python pour communiquer avec un système existant. Le code Java fonctionne avec le système et est mon modèle. – user2534685