2011-12-29 90 views
1

我有一個用傳統ASP編寫的應用程序,它通過CAPICOM加密數據並將其存儲在數據庫中。加密的代碼看起來是這樣的(經典的ASP,VB簡化一點贅述。):如何找到用於AES加密我的數據的初始化向量CAPICOM?

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必須使用初始化向量,但不能公開它。我怎樣才能找到那個矢量?

+0

好奇,如果你找到了解決方案。我處於同樣的情況,並且正忙於解密工作! – Dave 2014-01-11 21:07:42

+0

@Dave - 我從來沒有這個工作,我們最終採取了另一種方法。但我確實發現CAPICOM在Classic ASP中吐出的值不僅包含加密值,還用其他屬性加密了整個複雜對象。任何解密例程都需要解析整個對象才能正常工作。 – 2014-01-13 05:56:56

回答

1

首先將全零IV傳遞給.NET解密例程。

如果整個郵件解密正常,那麼原始加密也使用空IV。

它很可能會得到一個損壞的第一個塊(16個字節)和可讀的第二個和後續塊。

如果第二個塊看起來好像是消息的實際開始,那麼原始IV將作爲加密消息的第一個塊傳遞。這是一種非常常見的技術。

如果沒有,那麼你將不得不詢問誰加密了消息,他們使用了什麼IV。或者沒有消息的前16個字節。

+0

作爲一個小小的說明,您將需要創建一個完全塊大小的字節的空 - 四,對於AES是16字節。 – 2012-01-02 13:43:57