Rijndael / AES 从 C# 到 VB6
我需要在 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 包装器类。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用 .NET 中的互操作从 VB6 调用 C# 实现。 这样双方都会使用同一个库。
以下是一些其他信息: http://msdn.microsoft.com /en-us/library/hfzzah2c(vs.71).aspx
You could use interop from .NET to call the C# implementation from VB6. That way both sides would be using the same library.
Here's some additional info: http://msdn.microsoft.com/en-us/library/hfzzah2c(vs.71).aspx
我刚刚获取了 SlowAES(AES 的 Javascript 实现),并将其嵌入到 Windows 脚本组件中,这使得它可以通过 COM 访问。 然后我就可以从 COM 客户端调用该组件。 我没有尝试 VB6,因为我没有 Visual Studio 6。但是对于我尝试过的 COM 客户端,我发现加密与 .NET 和 RijndaelManaged() 类,当我使用相同的密钥、IV、模式和密钥大小时。
SlowAES 有一定的局限性; 例如,我没有看到欧洲央行模式。 但我测试的东西与.NET兼容。
WSC 文件的源代码已提供。 该源代码还包括可从 VB6 使用的符合 RFC2898 的 PBKDF2。 因此您可以通过密码设置密钥。 它与 Rfc2898DeriveBytes 类兼容。网。
另请参阅相关问题。
I just grabbed SlowAES, a Javascript implementation of AES, and embedded it into a Windows Script Component, which makes it accessible via COM. I was then able to call into the component from COM clients. I didn't try VB6 because i don't have Visual Studio 6. But for the COM clients I tried, I found the encryption to be completely compatible with .NET and the RijndaelManaged() class, when I use the same key, IV, mode, and keysize.
SlowAES is sort of limited; i didn't see an ECB mode for example. But the stuff I tested is compatible with .NET.
The source for the WSC file is available. That source also includes a RFC2898-compliant PBKDF2 usable from VB6. So you can set the key from a password. It is compatible with the Rfc2898DeriveBytes class in .NET.
See also, a related question.
也许我会给你一些关于 IV 的信息。
初始化向量是明文发送的数据,应为每次加密随机生成,以使构造型标头攻击更难或不可能执行。 当然,加密器和解密器必须具有相同的值集。
还有一些可以运行加密和解密的模式。 看一下此页面:维基百科:分组密码操作模式。 您还应该确保两者的此模式相同。
Maybe I'll give you some informations regarding IV.
Initialization Vector is a clear-text sent data that should be generated randomly for each encryption to make stereotype headers attack harder or imposible to perform. Of course both encrypter and decrypter MUST have same value set.
Also there are some modes in which encryption and decryption may run. Have a look at this page: Wikipedia: Block cipher modes of operation. You should also ensure that this mode is same for both of them.
VbCorLib 现在支持加密技术,包括 Rijndael。
它是免费的并且类似于 .NET。 链接:http://vbcorlib.blogspot.com/
VbCorLib now supports cryptography, included Rijndael.
It's free and .NET-like. Link: http://vbcorlib.blogspot.com/
如果您可以进行简单的 C 到 C# 转换,这里是一个很好的解决方案。 它与 VB6/php 和 C 配合得很好。看看 C++ 加密、 Visual Basic、使用 PC1 的 php。
If you can do a simple C to C# conversion here is a nice solution. It works great with VB6/php and C. Have a look at Encryption for C++, Visual Basic, php using PC1.