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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top