私は簡単な質問があります。 私はだから私は、このJavaタラはと仕事をしなければならないC#SHA256をJavaからCに変換する
にJavaからSHA256チェックサムメソッドを書き換える必要があります。
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)を
それぞれのHashAlgorithm派生クラス(この場合はSHA256)のTransformBlock()メソッドとTransformFinalBlock()メソッドの代わりに、update()メソッドとdigest()メソッドを基本的に置き換える必要があります。
は、だから私は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
170,44,95,84,3,50,7,137,220,46,39,32,136,7,10,170,155,110,163,184に変換し、その変換され、 243,163,214,111,0,59,171,193,241,158,239,204
C#コードは
72,108,14,47,15,200,209,10,68,87,17,220,67,226,162,123,69,186,130,167,239,250,180,178,75,101,39,195,32,171,156,178
sha256.ComputeHash()
を使用して返しながら
この質問を休耕してください:http://stackoverflow.com/questions/1521249/generating-an-xml-document-hash-in-c-sharp – mkysoft
独立したツールを何(読み:作業保証) 'sha256sum'のように印刷しますか? – rustyx
@RustyX http://onlinemd5.comで試したところ、結果はJavaコードの結果と同じです。 – Shazi