我在VB6中有一个解密例程。我现在想要在C#中进行相同的解密。 需要解密的字符串是unicode,所以我使用Encoding.Unicode.GetString来读取C#中的输入。输入现在看起来与VB6完全相同。
循环中的前几个字符被解密了!然后我遇到了一个不同...... 程序使用与VB6不同的索引解析字符'〜'。
调试时我在VB和.Net中看到以下内容:
VB6~ =代码152
C#〜=代码732
毋庸置疑,解密失败了。我需要为上面提到的角色获得152分。
这里有什么问题?
此致
米歇尔
答案 0 :(得分:1)
你的VB6没有读取Unicode(我猜在Windows-1252代码页中),这就是为什么它会返回不同的字符代码。
答案 1 :(得分:0)
“角色152”究竟是什么意思?你是怎么得到这个号码的?
请注意,“在Unicode中”可能意味着许多不同的东西。你确定它在二进制数据中被编码为UTF-16吗?如果您可以发布有关源数据的更多信息,那将非常有用。
此外,加密和解密几乎总是使用字节而不是字符来完成。虽然我知道您需要重现遗留行为,但您应该尝试逐渐将字符串视为不透明的二进制数据。
答案 2 :(得分:0)
我以前做过这个。问题出在您的编码中。 .NET是unicode,VB6是Unifail。
在.NET端,您需要使用Encoding.ASCII将字符串转换为字节数组,反之亦然。
Encoding.ASCII.GetString(decrypted);
//and
Encoding.ASCII.GetBytes(cleartext);
因此,当你加密发送到VB应用程序时,你必须使用ASCII.GetBytes然后加密那个字节数组,当你从VB端获得一个字节数组时,你必须解密它们并使用ASCII.GetString来将字节解码为可用的字符串。