Pregunta

Tengo una rutina de descifrado en VB6. ahora quiero el mismo descifrado en C #. Las cadenas que deben descifrado están en Unicode, por lo que utilizan Encoding.Unicode.GetString para leer la entrada en C #. La entrada ahora es exactamente el mismo que en Visual Basic 6.

Los primeros caracteres en el bucle se descifran bien! Entonces me encuentro con una diferencia ... El programa analiza el carácter '~' con un índice diferente que en Visual Basic 6.

Al depurar veo lo siguiente en VB y en .Net:
VB6 ~ = código 152
C # ~ = código 732

No es necesario decir, no se puede descifrar. Necesito conseguir 152 para el carácter mencionado anteriormente.

¿Qué pasa aquí?

Saludos,

Michel

¿Fue útil?

Solución

Su VB6 no estaba leyendo Unicode (supongo que en la página de códigos de Windows-1252), que es por eso que se vuelve con un código de carácter diferente.

Otros consejos

¿Qué quiere decir con "carácter 152" exactamente? ¿Cómo consiguió ese número?

Tenga en cuenta que el estar "en Unicode" puede significar muchas cosas diferentes. ¿Seguro que está codificado como UTF-16 en los datos binarios? Si puede publicar información sobre los datos de origen, eso sería muy útil.

Además, el cifrado y el descifrado deben casi siempre pueden hacer usando bytes, no caracteres. Si bien entiendo que necesita para reproducir el comportamiento heredado, usted debe tratar de emigrar lejos de tratamiento de cadenas como datos binarios opacos con el tiempo.

He hecho esto antes. El problema está en su codificación. Donde .NET es Unicode, VB6 es Unifail.

En el lado .NET, es necesario utilizar Encoding.ASCII para convertir sus cadenas en las matrices de bytes y viceversa.

Encoding.ASCII.GetString(decrypted);
//and
Encoding.ASCII.GetBytes(cleartext);

Por lo tanto, cuando se va a cifrar para enviar a la aplicación VB, debe utilizar ASCII.GetBytes y luego cifrar que el conjunto de bytes, y cuando se obtiene una matriz de bytes desde el lado VB debe descifrarlos y utilizar a ASCII.GetString descodificar los bytes en una cadena utilizable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top