Расшифруйте зашифрованный текст, если знаете ключ, простой текст и немного уверены в алгоритме - PullRequest
2 голосов
/ 22 марта 2011

Скажите, что я знаю, что:

a) Некоторый простой текст был зашифрован следующим 128-битным ключом: 7, 185,138,208,128,211,227,11,63,145,255,245,1,7,177,231

b) Пустая строка ВСЕГДА шифруется в следующую base64: MEUxILm04F / S2qSIlJKdPQ ==

c) Строка 662-862-4967 ВСЕГДА шифруется на следующую base64: Zu51CRz6DOsTiLc8KhP1Aw ==

d) Метод шифрования, вероятно, AES 128 с размером блока 128 бит.

Можно ли (и / или прямо) отказаться от IV, который использовался, если AES был реализован в режиме CBC?

Я пытался воссоздать зашифрованный текст MEUxILm04F / S2qSIlJKdPQ == (после base64) в .net, используя RijndaelManaged () в различных режимах и с (где это применимо) различными простыми IV, такими как все нули, но я не могу воспроизвести.

Вот код, который я использую, чтобы попытаться зашифровать пустую строку, чтобы получить MEUxILm04F / S2qSIlJKdPQ == с ключом ввода, как указано выше (закомментированные строки - это то, что я пробовал):

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

1 Ответ

0 голосов
/ 25 марта 2011

В режиме CBC , IV кодируется XOR с открытым текстом перед шифрованием .

Таким образом, извлечение IV для первого блока (оба выходных сигнала имеют 128 бит) с пустым открытым текстом эквивалентно расшифровке этого блока с помощью вашего ключа.

Однако ваш «128-битный ключ» выглядит как 8-битный, поэтому я не смог вычислить IV.

Я использовал следующие аргументы для OpenSSL:

echo 'MEUxILm04F/S2qSIlJKdPQ==' | \
openssl enc -d -base64 | \
openssl enc -d -aes-128-ecb -K 'B98AD080D3E30B3F91FFF50107B1E7'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...