2

我一直在使用DOMDocumentVB6 (MSXML) 中的对象来创建和保存具有加密字符串的 XML 文件。但是,我认为这个字符串有某些特殊字符......

<EncryptedPassword>ÆÔ¤ïÎ
    ߯8KHÖN›¢)Þ,qiãÔÙ</EncryptedPassword>

有了这个,我进入我的 C# 项目,并以 UTF-8 编码反序列化这个 XML 文件,但它在这个字符串上失败了。我尝试过通过 ASCII 进行序列化,这又多了几个字符,但仍然失败。如果我在这个地方放一个纯文本字符串,一切都好!:(

我在想,也许我最好先将字符串从 VB6 转换为 MD5 类型的字符串,然后在 .NET 中解码 MD5 字符串,然后用特殊字符解密实际的字符串,但这是编码所有这些的额外步骤并希望有人在这里对我有更好的想法?

提前致谢!

4

2 回答 2

2

对您来说最好的做法是将加密字符串编码为将使用 ASCII 字符集的内容。最简单的方法是获取您的加密字符串,然后将其编码为 Base64 并将此编码值写入 XML 元素。

而在 .net 中,只需获取 XML 元素的值并从 Base64 解码它并“瞧”,您就有了加密字符串。

.Net 可以轻松解码 base64 字符串,请参阅:http: //msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx。(此页面可能使它看起来比实际情况更复杂)。

VB6 没有对 Base64 编码的原生支持,但在 google 上的快速搜索给出了一些关于如何轻松实现它的示例:

http://www.vbforums.com/showthread.php?t=379072

http://www.nonhostile.com/howto-encode-decode-base64-vb6.asp

http://www.mcmillan.org.nz/Programming/post/Base64-Class.aspx

http://www.freevbcode.com/ShowCode.asp?ID=2038

于 2012-05-15T16:19:56.360 回答
0

我得出的结论是,将这些字符存储在 XML 文件中是错误的。VB6 允许这样做,但.NET 不允许!因此,我已根据此链接将字符串转换为 Base64 数组:-

http://www.nonhostile.com/howto-encode-decode-base64-vb6.asp

现在,在 .NET 端,文件将反序列化回我的类中,我现在将密码存储为字节数组。然后我将它转换回我需要解密的字符串,现在这似乎引发了另一个问题!

    string password = Encoding.UTF7.GetString(this.EncryptedPassword);

通过这种编码转换,我得到的字符串几乎完全回到了我想要的状态,但是有一个大于字符的小字符没有正确翻译!然后有同事发现了一个栈溢出帖子,有最终答案!在这种类型的转换上,VB6 和 .NET 之间存在差异。执行以下操作可以解决问题:-

    string password = Encoding.GetEncoding(1252).GetString(this.EncryptedPassword);

感谢所有的帮助,非常感谢。关于这个的原始帖子是@ .Net unicode question, vb6 legacy

于 2012-05-16T08:30:48.167 回答