1

CAPICOMを介してデータを暗号化し、データベースに保存するClassicASPで記述されたアプリケーションがあります。暗号化コードは次のようになります(クラシック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 復号化ルーチンに渡します。

メッセージ全体が正常に復号化された場合、元の暗号化でも null IV が使用されています。

最初のブロック (16 バイト) が破損し、2 番目以降のブロックが読み取り可能になる可能性が高くなります。

2 番目のブロックがメッセージの実際の開始であるかのように見える場合、元の IV は暗号化されたメッセージの最初のブロックとして渡されました。それはかなり一般的なテクニックです。

そうでない場合は、メッセージを暗号化した人に、どの IV を使用したかを尋ねる必要があります。または、メッセージの最初の 16 バイトがなくても問題ありません。

于 2011-12-29T17:48:12.470 に答える