我有一个用经典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.CreateEncryptor时,RijndaelManaged需要传递一个密钥和一个初始化向量,而CAPICOM不接受初始化向量。我假设CAPICOM必须使用初始化向量,但没有公开它。我怎样才能找到那个向量呢?
发布于 2011-12-30 01:48:12
首先将一个全零IV传递给.NET解密例程。
如果整个消息解密正常,那么原始加密也使用null IV。
更有可能的是,您将得到损坏的第一个块(16字节),以及可读的第二个和后续块。
如果第二个块看起来像是消息的实际开始,那么原始IV将作为加密消息的第一个块传递。这是一种非常常见的技术。
如果不是,那么你将不得不询问加密消息的人他们使用的是什么IV。或者在没有消息的前16个字节的情况下存活。
https://stackoverflow.com/questions/8670499
复制相似问题