从C#到VB6的Rijndael / AES加密算法转换

4
我需要在VB6中加密一个字节数组并在C#(NET 2.0)中解密它。反之亦然(从C#到VB6)。
在C#中,我使用了RijndaelManaged类。在VB6中,我使用了从互联网上免费获取的代码。最好的似乎是http://www.frez.co.uk/freecode.htm#rijndael 但是两个实现从相同的输入开始生成不同的输出:(
也许这是RijndaelManaged中IV向量的问题...我不理解...
在VB6和NET之间使用Rijndael / AES或TripleDes的任何解决方案/经验吗?
谢谢
更新:重要提示:运行vb6应用程序的计算机没有NET框架。因此,我无法使用Interop和/或作为COM公开的NET包装器类。:(

1
你不能反过来做吗?即暴露VB6实现为COM,供C#应用使用? - Dan C.
5个回答

8

我赞同Barnwell先生的观点——COM互操作性也是我的选择。 - Nano Taboada
其他的都像是代码异味,但在VB6中使用.NET COM对象存在一个令人烦恼的问题:调试器以vb6.exe的形式运行并从Program Files加载程序集,因此只有当您的COM对象位于GAC或Program Files中时,调试器才能找到它。 - flipdoubt

1

我刚刚使用了 SlowAES,它是一个JavaScript实现的AES,并将其嵌入到Windows脚本组件中,这使得它可以通过COM访问。然后,我能够从COM客户端调用该组件。我没试过VB6,因为我没有Visual Studio 6。但对于我尝试过的COM客户端,当我使用相同的密钥、IV、模式和密钥长度时,我发现加密与.NET和 RijndaelManaged()类完全兼容。

SlowAES有一定的限制;例如,我没有看到ECB模式。但我测试过的东西与.NET兼容。

WSC文件的源代码可用。该源代码还包括一个符合RFC2898标准的PBKDF2,可从VB6中使用。因此,您可以通过密码设置密钥。它与.NET中的Rfc2898DeriveBytes类兼容。

另请参阅相关问题


0

0

0

也许我可以给你一些关于IV的信息。

初始化向量是明文发送的数据,应该为每个加密过程随机生成,以使典型头部攻击更难或不可能进行。当然,加密器和解密器必须具有相同的值集。

此外,加密和解密可能运行在某些模式下。请查看这个页面:Wikipedia: Block cipher modes of operation。您还应确保两者的模式相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接