1

我有一个用 Classic ASP 编写的应用程序,它通过 CAPICOM 加密数据并将其存储在数据库中。加密代码看起来像这样(经典的 ASP,VB。为简洁起见稍微简化了一点):

set encryptObject = Server.CreateObject("CAPICOM.EncryptedData")

encryptObject.Algorithm.Name = 4 ' 4 is AES
encryptObject.Algorithm.KeyLength = ' 0 is MAX
encryptObject.SetSecret(sharedSecret) ' sharedSecret was set earlier
encryptObject.Content = stringToEncrypt

encryptedString = encryptObject.Encrypt()

现在,我有一个 .NET 应用程序需要读取这些数据并对其进行解密。在使用该类之前,我已经在 .NET 中完成了与 AES 兼容的加密/解密RijndaelManaged,我希望我可以使用相同的方法来解密这些数据。但是,我不知道如何让它与 CAPICOM 的加密数据一起使用,因为RijndaelManaged在调用时需要您传递一个密钥和一个初始化向量RijndaelManaged.CreateEncryptor,而 CAPICOM 不采用初始化向量。我假设 CAPICOM 必须使用初始化向量,但不公开它。我怎样才能找到那个向量?

4

1 回答 1

1

首先将一个全零 IV 传递给 .NET 解密例程。

如果整个消息解密得很好,那么原始加密也使用了空 IV。

您更有可能得到一个损坏的第一个块(16 个字节)和可读的第二个和后续块。

如果第二个块看起来好像是消息的实际开始,则原始 IV 作为加密消息的第一个块传递。这是一种很常见的技术。

如果不是,那么您将不得不询问加密消息的人他们使用了什么 IV。或者没有消息的前 16 个字节。

于 2011-12-29T17:48:12.470 回答