Abbiamo recentemente trovato un codice di esempio da un fornitore per l'hashing di una chiave segreta per una chiamata al servizio web, il loro campione era in VB.NET che abbiamo convertito in C#. Ciò ha causato l'hashing di produrre input diversi. Si scopre che il modo in cui stavano generando la chiave per la crittografia era convertendo un array di caratteri in una stringa e tornando a un array di byte. Ciò mi ha portato a scoprire che l'encoder predefinito di VB.NET e C# funziona diversamente con alcuni caratteri.Perché Encoding.Default.GetBytes() restituisce risultati diversi in VB.NET e C#?
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))
L'uscita C# è 63, mentre VB è il valore di byte corretto di 149. se si utilizza qualsiasi altro valore, come il 145, ecc , l'uscita corrisponde.
Camminando attraverso il debug, l'encoder predefinito VB e C# è SBCSCodePageEncoding.
Qualcuno sa perché questo è?
Ho corretto il codice di esempio inizializzando direttamente un array di byte, che avrebbe dovuto essere in primo luogo, ma voglio ancora sapere perché l'encoder, che non dovrebbe essere specifico della lingua, sembra essere proprio questo.
Ecco un link alla documentazione: http://msdn.microsoft .com/it/us/library/613dxh46 (VS.80) .aspx –
Cheers Jon: stavo proprio aggiungendo un collegamento. – RichardOD
Grazie! Stavo pensando che avesse qualcosa a che fare con il bit Chr(), ma non ero sicuro di come evitare l'uso di Chr() in VB.NET. – Annagram