2011-03-22 17 views
2

のやや確かに私がいることを知っていると言う知っている場合:復号化暗号文キー、プレーンテキスト、およびアルゴリズム

a)の一部のプレーンテキストは、次の128ビットの鍵で暗号化された: 7、185,138,208,128,211,227,11,63,145,255,245、 1,7,17​​7,231

B)空の文字列は、常に次のBASE64に暗号化:MEUxILm04F/S2qSIlJKdPQ ==

C)662-862-4967の文字列は、常に次のBASE64に暗号化:Zu51CRz6DOsTiLc8KhP1Awの==

d)暗号化方法は128ビットブロックサイズのAES 128である可能性が高い。

AESがCBCモードで実装されていた場合に使用されたIVをバックアウトすることは可能ですか?

さまざまなモードでRijndaelManaged()を使用し、すべての零点のような異なる単純IVを使用して、ネットで、MEUxILm04F/S2qSIlJKdPQ ==(base64の後)のサイファーテキストを再作成しようとしましたが、再現できません。

Public Shared Function Encrypt(ByVal toEncrypt As String, ByVal keyArray As [Byte]()) As String 

     Dim toEncryptArray As Byte() = UTF8Encoding.UTF8.GetBytes(toEncrypt) 

     'Dim IV As Byte() = New Byte() {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} 
     Dim IV As Byte() = New Byte(15) {} 

     Dim rDel As New RijndaelManaged() 
     rDel.KeySize = 128 
     rDel.BlockSize = 128 

     rDel.IV = IV 

     rDel.Key = keyArray 
     'rDel.Mode = CipherMode.ECB 
     rDel.Mode = CipherMode.CBC 

     rDel.Padding = PaddingMode.PKCS7 
     'rDel.Padding = PaddingMode.Zeros 

     Dim cTransform As ICryptoTransform = rDel.CreateEncryptor() 
     Dim resultArray As Byte() = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length) 
     Return Convert.ToBase64String(resultArray, 0, resultArray.Length) 
    End Function 

答えて

0
:ここ

は、私は上記のように、キー入力でMEUxILm04F/S2qSIlJKdPQの== を取得しようと、空白文字列を暗号化するために使用しているコードです(コメント行は、私が試した事があります)

CBC modeにおいて、IVは、暗号化の前に、平文とXORされる。

したがって、最初のブロックのIV(出力は両方とも128ビット)を空白の平文で抽出することは、そのブロックでそのキーを復号化することと同じです。

しかし、あなたの「128ビットキー」は8ビット短く表示されるので、IVを計算することができませんでした。

私は、OpenSSLに次の引数を使用:私は(最初のバイトとして7を行方不明になった)上記のキーを更新

echo 'MEUxILm04F/S2qSIlJKdPQ==' | \ 
openssl enc -d -base64 | \ 
openssl enc -d -aes-128-ecb -K 'B98AD080D3E30B3F91FFF50107B1E7' 
+0

を。これを勉強した後、私は同じ結論に達しました。ありがとうございます。私はECBモードを使用して暗号文を解読し、16バイト配列(PKCS7パディング)でxを取得してIVを得ました。 – klz

+0

16バイトの配列に空の文字列を表す16個の16をパディングしました。 – klz

関連する問題