간단한 질문이 있습니다.SHA256을 Java에서 C로 변환 #
Canonicalizer c14Canonicalizer = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_EXCL_WITH_COMMENTS);
byte[] byteArray = c14Canonicalizer.canonicalizeSubtree(doc);
// At this point, the byteArray in Java and the data in C# matches up.
// That is, after the java bytes are converted to unsigned bytes using
// java.lang.Byte.toUnsignedInt()
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(byteArray);
byte byteData[] = md.digest();
(BYTEARRAY, 당신은 그것을 짐작, 바이트 배열입니다 : D) 나는 C#
그래서내가 작업이 자바 대구가 자바에서 SHA256 체크섬 방법을 다시 작성해야
update() 및 digest() 메서드는 기본적으로 각각의 HashAlgorithm 파생 클래스 (이 경우 SHA256)의 TransformBlock() 및 TransformFinalBlock() 메서드 대신 substitutet이어야합니다.
그래서 나는 C#에서 이와 유사한 뭔가 시도했다 :var data = Encoding.UTF8.GetBytes(xmlString);
// At this point, the byteArray in Java and the data in C# matches up.
// That is, after the java bytes are converted to unsigned bytes using
// java.lang.Byte.toUnsignedInt()
using (var sha256 = SHA256.Create())
{
byte[] shaBytes = new byte[data.Length];
data.CopyTo(shaBytes, 0);
sha256.TransformBlock(shaBytes, 0, shaBytes.Length, shaBytes, 0);
sha256.TransformFinalBlock(shaBytes, 0, shaBytes.Length);
return sha256.Hash;
}
는
그러나, 바이트가 일치하지 않는 (다시, 데이터를 바이트의 배열입니다). 내가 여기서 뭔가를 놓치고 있니?
(물론 나는 물론, 그렇지 않으면 작동합니다 오른쪽 : S)
UPDATE 당신에 가서 좀 더 많은 정보를 제공하기 위해
, 나는 사이의 바이트 일치 한 위에서 본 코드를 실행하기 전에 Java 및 C# 코드를 사용하십시오. 그리고 나서 그들은 일치합니다. 그러나 C# 코드의 바이트는 UTF8 인코딩 문자열에서 가져오고 Java 바이트는 c14Canonicalizer.canonicalizeSubtree() 메소드에서 가져옵니다.
위의 코드 예제를 업데이트하여 해당 출처를 포함하도록하겠습니다.
UPDATE 그것은 가치가 무엇인지에 대한
, 자바 md.digest() 메소드는 다음 바이트 반환
-86, 44, 95, 84, 3, 50, 7, -119을 -36, -46, -39, -32, -120, -70, -86, -101, 110, -93, -72, -13, -93, -42, 111, 0, 59, 63, -15, -98, -17, -52
1704495843507137220463932136710170155110,163,184로 변환하는 변환 243,163,214,111,059171193241158239204
sha256.ComputeHash()
를 사용할 때 C# 코드는
72,10814471520020910688717220672261621236918613016723925018017875101,39,195,32,171,156,178
을 반환하면서
이 질문을 경작하십시오 http://stackoverflow.com/questions/1521249/generating-an-xml-document-hash-in-c-sharp – mkysoft
독립적 인 도구를 무엇을 (읽기 : 노동 보장) 'sha256sum' 프린트와 같은 것입니까? – rustyx
@RustyX http://onlinemd5.com에서 시도한 결과는 Java 코드의 결과와 같습니다. – Shazi