Konvertieren von SHA256 von Java nach C #

Ich habe eine einfache Frage. Ich muss eine sha256-Prüfsummenmethode von Java nach C # @ umschreib

So habe ich diesen Java-Cod zum Arbeiten mit:

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 ist, Sie haben es erraten, ein Bytearray: D)

Von dem, was ich finden kann, sollten die Methoden update () und digest () grundsätzlich die Methoden TransformBlock () und TransformFinalBlock () in der jeweiligen von HashAlgorithm abgeleiteten Klasse ersetzen (in diesem Fall SHA256).

So habe ich versucht, mit etwas ähnlichem in 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;
}

(und wieder sind Daten ein Byte-Array)

Die Bytes stimmen jedoch nicht überein. Vermisse ich hier etwas?

(na klar bin ich, sonst würde es doch klappen, oder?: S)

AKTUALISIERE

Um Ihnen weitere Informationen zu geben, habe ich die Bytes zwischen dem Java- und dem C # -Code abgeglichen, bevor ich den oben gezeigten Code ausführe. Und dann passen sie zusammen. Die Bytes im C # -Code stammen jedoch aus einer UTF8-codierten Zeichenfolge, während die Java-Bytes aus einer c14Canonicalizer.canonicalizeSubtree () -Methode stammen.

Ich aktualisiere die obigen Codebeispiele, um ihre Herkunft einzuschließen.

AKTUALISIERE

Für das, was es wert ist, gibt die Java-Methode md.digest () die folgenden Bytes zurück:

-86, 44, 95, 84, 3, 50, 7, -119, -36, 46, 39, 32, -120, 7, 10, -86, -101, 110, -93, -72, - 13, -93, -42, 111, 0, 59, -85, -63, -15, -98, -17, -52

wenn konvertiert, übersetzt zu

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

während der C # -Code @ zurückgi

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

beim Benutzensha256.ComputeHash()

Antworten auf die Frage(6)

Ihre Antwort auf die Frage