Скажи, что я знаю, что:
A) Некоторый обычный текст был зашифрован следующим 128-битным ключом: 7, 185,138,208,128,211,227,11,63,145,255,245,1,7,177,231
Б) Пустая строка ВСЕГДА шифруется до следующего 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 ответ
В режиме CBC IV подвергается операции XOR с открытым текстом до шифрования.
Следовательно, извлечение IV для первого блока (ваши выходные данные имеют длину 128 бит) с пустым открытым текстом эквивалентно расшифровке этого блока с помощью вашего ключа.
Однако ваш «128-битный ключ» кажется коротким на 8 бит, поэтому я не смог вычислить IV.
Я использовал следующие аргументы для OpenSSL:
echo 'MEUxILm04F/S2qSIlJKdPQ==' | \
openssl enc -d -base64 | \
openssl enc -d -aes-128-ecb -K 'B98AD080D3E30B3F91FFF50107B1E7'
Похожие вопросы
Новые вопросы
aes
Advanced Encryption Standard (AES) - это алгоритм криптографического блочного шифрования.