Question

J'ai une routine de décryptage dans VB6. Je veux maintenant le même décryptage en C #. Les chaînes qui ont besoin de décryptage sont en unicode, donc j'utiliser Encoding.Unicode.GetString pour lire l'entrée en C #. L'entrée ressemble maintenant exactement les mêmes que dans VB6.

Les premiers caractères dans la boucle sont décryptées ok! Ensuite, je rencontre une différence ... Le programme analyse le caractère « ~ » avec un indice différent de celui dans VB6.

Lors du débogage, je vois ce qui suit dans VB et en .Net:
VB6 ~ = Code 152
C # ~ = Code 732

Il va sans dire, ne le décryptage. Je dois obtenir 152 pour le caractère mentionné ci-dessus.

Quel est le problème ici?

Cordialement,

Michel

Était-ce utile?

La solution

Votre VB6 n'a pas été en train de lire Unicode (je suppose à codepage Windows 1252), ce qui est pourquoi il est revenu avec un code de caractère différent.

Autres conseils

Que voulez-vous dire par « caractère 152 » exactement? Comment avez-vous ce chiffre?

Notez que étant « en Unicode » pourrait signifier beaucoup de choses différentes. Etes-vous sûr qu'il est codé en UTF-16 dans les données binaires? Si vous pouviez poster plus sur les données source, ce serait très utile.

En outre, le chiffrement et le déchiffrement doivent presque toujours faire en octets et non des caractères. Même si je comprends que vous devez reproduire le comportement de l'héritage, vous devriez essayer de migrer loin de traiter les chaînes sous forme de données binaires opaques au fil du temps.

Je l'ai déjà fait. Le problème est dans l'encodage. Où .NET est unicode, VB6 est Unifail.

Du côté .NET, vous devez utiliser Encoding.ASCII pour convertir vos chaînes en tableaux d'octets et vice versa.

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

Alors, lorsque vous cryptez d'envoyer à l'application VB, vous devez utiliser ASCII.GetBytes puis chiffrer que tableau d'octets, et quand vous obtenez un tableau d'octets du côté VB vous devez les décrypter et utiliser ASCII.GetString à décoder les octets dans une chaîne utilisable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top