【问题标题】:Rijndael / AES from C# to VB6Rijndael / AES 从 C# 到 VB6
【发布时间】:2009-04-15 13:44:55
【问题描述】:

我需要在 VB6 中加密一个字节数组并在 C# (NET 2.0) 中解密它。反之亦然(C# 到 VB6)。

在 C# 中,我使用了 RijndaelManaged 类。在 VB6 中,我使用了来自 Internet 的免费片段。最好的似乎是http://www.frez.co.uk/freecode.htm#rijndael 但是这两种实现从相同的输入开始产生不同的输出:(

也许是 RijndaelManaged 中的 IV 向量有问题...我不明白...

在 VB6 和 NET 之间使用 Rijndael/AES 的任何解决方案/经验?或者 TripleDes....

谢谢

更新:重要提示:运行 vb6 应用程序的机器没有 NET 框架。所以我不能使用 Interop 和/或暴露为 COM 的 NET 包装类。 :(

【问题讨论】:

  • 你不能反过来做吗? IE。将 VB6 实现公开为 COM 以供 C# 应用使用?

标签: c# vb6 aes rijndaelmanaged rijndael


【解决方案1】:

您可以使用 .NET 的互操作从 VB6 调用 C# 实现。这样双方都将使用同一个库。

这里有一些附加信息:http://msdn.microsoft.com/en-us/library/hfzzah2c(vs.71).aspx

【讨论】:

  • 我支持 Barnwell 先生 -- COM Interop 也是我的选择。
  • 对我来说,所有其他的似乎都是代码气味,但是在 VB6 中使用 .NET COM 对象存在一个棘手的问题:调试器运行并从 Program Files 加载程序集为 vb6.exe,因此调试器只有在 GAC 或 Program Files 中时才会找到您的 COM 对象。
【解决方案2】:

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

SlowAES 有点受限;例如,我没有看到欧洲央行模式。但我测试的东西与.NET 兼容。

The source for the WSC file is available。该源还包括可从 VB6 使用的符合 RFC2898 的 PBKDF2。因此,您可以通过密码设置密钥。它与 .NET 中的 Rfc2898DeriveBytes 类兼容。

另请参阅a related question

【讨论】:

    【解决方案3】:

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

    初始化向量是一个明文发送的数据,应该为每次加密随机生成,以使构造型标头攻击更难或不可能执行。当然,加密器和解密器都必须设置相同的值。

    还有一些可以运行加密和解密的模式。看看这个页面:Wikipedia: Block cipher modes of operation。您还应确保两者的此模式相同。

    【讨论】:

      【解决方案4】:

      VbCorLib 现在支持加密,包括 Rijndael。

      它是免费的,并且类似于 .NET。链接:http://vbcorlib.blogspot.com/

      【讨论】:

        【解决方案5】:

        如果您可以在此处进行简单的 C 到 C# 转换,这是一个不错的解决方案。它适用于 VB6/php 和 C。看看Encryption for C++, Visual Basic, php using PC1

        【讨论】:

          猜你喜欢
          • 2023-03-23
          • 1970-01-01
          • 2014-10-25
          • 1970-01-01
          • 1970-01-01
          • 2012-05-02
          • 1970-01-01
          • 2012-12-22
          • 1970-01-01
          相关资源
          最近更新 更多