Aes Encryption... отсутствует важная часть
У меня есть метод в моем статическом классе шифрования, который выглядит следующим образом:
public static byte[] EncryptString(string toEncrypt, byte[] encryptionKey)
{
var toEncryptBytes = Encoding.UTF8.GetBytes(toEncrypt);
using (var provider = new AesCryptoServiceProvider())
{
provider.Key = encryptionKey;
provider.Mode = CipherMode.ECB;
provider.Padding = PaddingMode.ISO10126;
using (var encryptor = provider.CreateEncryptor(provider.Key, provider.IV))
{
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(toEncryptBytes, 0, toEncryptBytes.Length);
cs.FlushFinalBlock();
}
return ms.ToArray();
}
}
}
}
У меня есть модульный тест, который выглядит так:
[TestMethod]
public void EncryptStringEncryptsTest()
{
var toEncrypt = "My text to encrypt";
var encryptionKey = Convert.FromBase64String("93mcgv9UBYpwgoUX0AXEaU1BqTCufPWPkFdOdoILLDA=");
var encrypted = Encryption.EncryptString(toEncrypt, encryptionKey);
var text = Convert.ToBase64String(encrypted);
Assert.IsTrue(false);
}
Каждый раз, когда я запускаю это, text
значение меняется. Я ожидаю, что он будет постоянным, учитывая те же входные данные. Я ошибаюсь, ожидая этого, или я делаю что-то не так?
2 ответа
Решение
Ваше предположение неверно.
Заполнение ISO10126 добавит случайные данные для заполнения вашего сообщения кратным размеру блока.
Вы используете случайные байты заполнения, согласно ISO10126. Таким образом, результаты не будут одинаковыми каждый раз, даже если все входные данные одинаковы.