J'ai un problème étrange en obtenant le code de hachage équivalent du code de C# traduit en Java. Je ne sais pas, ce que fait la méthode de mise à jour de MessageDigest. Il devrait seulement mettre à jour le contenu de digest et devrait calculer le hachage après avoir appelé digest.Quel est l'équivalent du hachage du code Java en C#?
Même chose que je fais en C# avec SHAManaged512.ComputeHash (contenu). Mais je ne reçois pas le même code de hachage.
Voici le code Java.
public static String hash(String body, String secret) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(body.getBytes("UTF-8"));
byte[] bytes = md.digest(secret.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
} catch (Exception e) {
throw new RuntimeException();
}
}
Après est de code C#
private byte[] ComputeContentHash(string contentBody)
{
using (var shaM = new SHA512Managed())
{
var content = string.Concat(contentBody, Options.SecretKey);
var hashedValue = shaM.ComputeHash(ToJsonStream(content));
return hashedValue;
}
}
public static Stream ToJsonStream(object obj)
{
return new MemoryStream(Encoding.Unicode.GetBytes(obj.ToString()));
}
Merci pour vos commentaires. Je l'ai fait moi-même. Le problème était d'ajouter au C# côté clé secrète d'abord, puis le contenu. – Usman
@Usman Dans ce cas, vous pouvez accepter votre propre réponse. Quant à ma réponse, elle tient toujours. Je ne sais pas comment cela fonctionne pour vous car UTF8 est généralement différent de UTF16 et vous utilisez évidemment UTF8 en Java et UTF16 en C#. – ispiro
@downvoter Soins pour expliquer pourquoi? – ispiro