0

我在 VB6 中有一个解密程序。我现在想要在 C# 中进行相同的解密。需要解密的字符串是 unicode,所以我使用 Encoding.Unicode.GetString 来读取 C# 中的输入。输入现在看起来与 VB6 中的完全相同。

循环中的前几个字符被解密 ok!然后我遇到了一个不同......程序用与VB6不同的索引解析字符'〜'。

调试时,我在 VB 和 .Net 中看到以下内容:
VB6 ~ = code 152
C# ~ = code 732

不用说,解密失败。我需要为上述角色获得 152。

这里有什么问题?

问候,

米歇尔

4

3 回答 3

1

您的 VB6 没有读取 Unicode(我猜是 Windows-1252 代码页),这就是它返回不同字符代码的原因。

于 2009-06-29T13:27:13.737 回答
0

“字符 152”到底是什么意思?你是怎么得到那个号码的?

请注意,“使用 Unicode”可能意味着许多不同的事情。您确定它在二进制数据中编码为 UTF-16 吗?如果您可以发布有关源数据的更多信息,那将非常有帮助。

此外,加密和解密几乎总是应该使用字节而不是字符来完成。虽然我知道您需要重现遗留行为,但随着时间的推移,您应该尝试不再将字符串视为不透明的二进制数据。

于 2009-06-29T13:27:55.593 回答
0

我以前做过。问题出在您的编码中。.NET 是 unicode,VB6 是 Unifail。

在 .NET 方面,您需要使用 Encoding.ASCII 将字符串转换为字节数组,反之亦然。

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

因此,当您加密发送到 VB 应用程序时,您必须使用 ASCII.GetBytes 然后加密该字节数组,当您从 VB 端获取字节数组时,您必须解密它们并使用 ASCII.GetString 解码字节变成一个可用的字符串。

于 2009-06-29T13:33:38.000 回答