Recientemente encontramos un código de muestra de un proveedor para hashir una clave secreta para una llamada al servicio web, su muestra estaba en VB.NET que convertimos a C#. Esto causó que el hash produjera entradas diferentes. Resulta que la forma en que generaban la clave para el cifrado era convirtiendo una matriz char en una cadena y volviendo a una matriz de bytes. Esto me llevó al descubrimiento de que el codificador predeterminado de VB.NET y C# funciona de manera diferente con algunos caracteres.¿Por qué Encoding.Default.GetBytes() devuelve resultados diferentes en VB.NET y 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))
El C# de salida es de 63, mientras que VB es el valor adecuado de bytes de 149. si se utiliza cualquier otro valor, como el 145, etc. , el resultado coincide.
Al recorrer la depuración, tanto el codificador predeterminado de VB como el de C# son SBCSCodePageEncoding.
¿Alguien sabe por qué es esto?
He corregido el código de ejemplo inicializando directamente una matriz de bytes, lo que debería haber sido, en primer lugar, pero todavía quiero saber por qué el codificador, que no debe ser un lenguaje específico, parece ser sólo eso.
Aquí hay un enlace a la documentación: http://msdn.microsoft .com/en-us/library/613dxh46 (VS.80) .aspx –
Saludos Jon- Estaba en el proceso de agregar un enlace. – RichardOD
Gracias! Estaba pensando que tenía algo que ver con el bit Chr(), pero no estaba seguro de cómo evitar el uso de Chr() en VB.NET. – Annagram