2011-12-29 24 views
1

私は、CAPICOM経由でデータを暗号化してデータベースに保存するClassic ASPで書かれたアプリケーションを持っています。暗号化コードは次のようなものになります(クラシック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互換の暗号化/復号化を行っています。このデータを復号化するために同じ方法を使用できることを期待しています。しかし、RijndaelManagedRijndaelManaged.CreateEncryptorを呼び出すときにキーと初期化ベクトルを渡す必要があり、CAPICOMは初期化ベクトルをとらないので、これをCAPICOMの暗号化データで動作させる方法を理解できません。私はCAPICOMが初期化ベクトルを使用していなければならないと仮定します。どのようにしてそのベクターを見つけることができますか?

+0

これについての解決策を見つけたのか不思議です。私は同じ状況に陥っており、解読が機能するように戸惑っています! – Dave

+0

@Dave - これは決してうまくいきませんでした。しかし、私は、Classic ASPのCAPICOMが吐き出す価値には暗号化された値以上のものが含まれていることを知りました。複雑なオブジェクト全体をさらにプロパティで暗号化しています。解読ルーチンは、正しく動作するためにオブジェクト全体を解析する必要があります。 –

答えて

1

まず、すべてゼロのIVを.NET復号化ルーチンに渡します。

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

マングルされた最初のブロック(16バイト)と読み込み可能な2番目以降のブロックを取得する可能性が高くなります。

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

もしそうでなければ、誰がメッセージを暗号化したのか、彼らが使ったIVを尋ねなければならないでしょう。それ以外の場合は、メッセージの最初の16バイトを使用しないでください。

+0

小さな説明として、正確にブロックサイズのバイトのnull-IVを作成する必要があります.AESは16バイトです。 –

関連する問題