如何找到用于AES加密数据的初始化矢量CAPICOM?

时间:2011-12-29 16:33:15

标签: .net encryption rijndaelmanaged capicom

我有一个用Classic ASP编写的应用程序,它通过CAPICOM加密数据并将其存储在数据库中。加密代码看起来像这样(Classic 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应用程序。在使用RijndaelManaged类之前,我已经在.NET中完成了AES兼容的加密/解密,我希望我可以使用相同的方法来解密这些数据。但是,我无法弄清楚如何使用CAPICOM的加密数据,因为RijndaelManaged要求您在调用RijndaelManaged.CreateEncryptor时传递密钥AND初始化向量,而CAPICOM不会初始化向量。我假设CAPICOM必须使用初始化向量,但不要暴露它。我怎样才能找到那个载体?

1 个答案:

答案 0 :(得分:1)

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

如果整个邮件解密正常,则原始加密也使用空IV。

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

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

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