Wir sind kürzlich auf einen Beispielcode eines Anbieters zum Hashing eines geheimen Schlüssels für einen Webdienstanruf gestoßen, deren Beispiel in VB.NET enthalten war und in C# konvertiert wurde. Dies führte dazu, dass das Hashing unterschiedliche Eingaben erzeugte. Es stellte sich heraus, dass die Art und Weise, wie sie den Schlüssel für die Verschlüsselung erzeugten, durch die Umwandlung eines char-Arrays in eine Zeichenfolge und zurück in ein Byte-Array erfolgte. Dies führte mich zu der Entdeckung, dass der Standard-Encoder von VB.NET und C# bei einigen Zeichen anders funktioniert.Warum Encoding.Default.GetBytes() gibt verschiedene Ergebnisse in VB.NET und C# zurück?
C#:
Console.Write(Encoding.Default.GetBytes(new char[] { (char)149 })[0]);
VB:
Dim b As Char() = {Chr(149)}
Console.WriteLine(Encoding.Default.GetBytes(b)(0))
Die C# Ausgabe 63 ist, während VB der korrekte Byte-Wert von 149. , wenn Sie einen anderen Wert verwenden ist, wie 145, usw. , die Ausgabe stimmt überein.
Wenn Sie durch das Debugging gehen, ist sowohl der VB- als auch der C# -Endcodierer SBCSCodePageEncoding.
Weiß jemand, warum das ist?
Ich habe den Beispielcode korrigiert, indem ich ein Byte-Array direkt initialisiert habe, was eigentlich hätte sein sollen, aber ich möchte immer noch wissen, warum der Encoder, der nicht sprachspezifisch sein sollte, genau das ist.
Hier ist ein Link auf die Dokumentation: http://msdn.microsoft .com/de-us/library/613dxh46 (VS.80) .aspx –
Prost Jon- Ich war gerade dabei, einen Link hinzuzufügen. – RichardOD
Danke! Ich dachte, es hätte etwas mit dem Chr() - Bit zu tun, aber ich war mir nicht sicher, wie ich die Verwendung von Chr() in VB.NET vermeiden konnte. – Annagram