2011-03-22 3 views
2

는 말 알고리즘의 다소 확실히 만약 내가 알고 :해독 암호 텍스트 키, 일반 텍스트를 알고,

가) 일부 일반 텍스트 키 다음 128 비트 암호화되었습니다 7, 185,138,208,128,211,227,11,63,145,255,245,) MEUxILm04F/S2qSIlJKdPQ의 ==

662-862-4967 (C)의 문자열은 항상 다음베이스 64에 암호화 : 1,7,177,231

b) 빈 문자열은 항상 다음베이스 64에 암호화 된 Zu51CRz6DOsTiLc8KhP1Aw ==

d) 암호화 방법은 128 비트 블록 크기의 AES 128 일 가능성이 높습니다.

AES가 CBC 모드로 구현 된 경우 사용 된 IV를 백 워드 아웃 할 수 있습니까?

여러 모드에서 RijndaelManaged()를 사용하고 모든 0과 같은 다른 간단한 IV를 사용하여 .net에서 MEUxILm04F/S2qSIlJKdPQ == (base64 이후)의 cypher 텍스트를 다시 만들려고했으나 재현 할 수 없습니다. .

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과 다음 인수를 사용했을

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

난 (제 7 바이트로 누락되었다) 상기 키를 업데이트. 이것을 공부 한 후, 나는 당신과 같은 결론을 내 렸습니다. 감사합니다. 나는 ECB 모드를 사용하여 암호문을 해독 한 다음 16 비트 (PKCS7 패딩)로 채워진 16 바이트 배열을 사용하여 IV를 얻습니다. – klz

+0

16 바이트 배열은 빈 문자열을 나타 내기 위해 16 개의 16으로 패딩되었습니다. – klz