problema unicode .net, legado vb6
-
21-08-2019 - |
Pergunta
Eu tenho uma rotina de descriptografia em VB6. Agora eu quero o mesmo descriptografia em C #. As cordas que precisam de decodificação estão em unicode, então eu uso Encoding.Unicode.GetString para ler a entrada em C #. A entrada agora parece exatamente o mesmo que no VB6.
Os primeiros caracteres no circuito são decifrada ok! Então eu encontro uma diferença ... O programa analisa o caractere '~' com um índice diferente do que em VB6.
Quando a depuração eu vejo o seguinte em VB e na Net:
VB6 ~ = código 152
C # = ~ código 732
É desnecessário dizer que descriptografia falhar. Eu preciso para obter 152 para o personagem mencionado acima.
O que está errado aqui?
Saudações,
Michel
Solução
Seu VB6 não estava lendo Unicode (eu acho at Windows-1252 página de código), que é por isso que é voltar com um código de caracteres diferente.
Outras dicas
O que você quer dizer com "caráter 152" exatamente? Como você conseguiu esse número?
Note que estar "em Unicode" pode significar muitas coisas diferentes. Tem certeza que é codificado como UTF-16 na dados binários? Se você pudesse postar mais sobre os dados de origem, que seria muito útil.
Além disso, a criptografia e descriptografia deve quase sempre ser feito usando bytes, não caracteres. Embora eu entenda que você precisa para reproduzir o comportamento legado, você deve tentar migrar longe de tratar strings como dados binários opacos ao longo do tempo.
Já fiz isso antes. O problema está na sua codificação. Onde NET é unicode, VB6 é Unifail.
Do lado da NET, você precisa usar Encoding.ASCII para converter seus strings em matrizes de bytes e vice-versa.
Encoding.ASCII.GetString(decrypted);
//and
Encoding.ASCII.GetBytes(cleartext);
Assim, quando você estiver criptografando para enviar para o aplicativo VB, você deve usar ASCII.GetBytes e depois transferimos essa matriz de bytes, e quando você começa um array de bytes do lado do VB você deve descriptografar os e uso ASCII.GetString para decodificar os bytes em uma string utilizável.