Java로 변환 된 C# 코드에서 해시 코드를 가져 오는 데 이상한 문제가 있습니다. MessageDigest의 업데이트 방법이 무엇인지 모르겠습니다. 다이제스트의 내용 만 업데이트하고 다이제스트를 호출 한 후 해시를 계산해야합니다.Java 코드를 C#으로 해싱하는 것과 동일합니다.
내가 C#에서 SHAManaged512.ComputeHash (콘텐츠)와 동일한 작업을하고 있습니다. 하지만 같은 해시 코드를 얻지는 않습니다.
다음은 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();
}
}
은 UTF8하지 않습니다 (당신이 C# ToJsonStream
방법에서 사용하는) 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()));
}
의견을 보내 주셔서 감사합니다. 나는 그것을 혼자서했다. 문제는 C# 측 비밀 키를 먼저 추가 한 다음 내용을 추가하는 것이 었습니다. – Usman
@Usman이 경우 자신의 대답을 수락 할 수 있습니다. 내 대답은 아직 남아 있습니다. UTF8이 일반적으로 UTF16과 다르다는 것과 UTF8을 C 및 Java에서 UTF8로 사용하고 있기 때문에 어떻게 작동하는지 모르겠습니다. – ispiro
@downvoter 이유를 설명하는 데주의해야합니까? – ispiro