Скажите, что я знаю, что:
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