Я пытаюсь выполнить следующий тест, чтобы возвращать результаты, которые должны возвращать определенный шифр. Они предоставляют строку Key, IV и Plaintext, как показано ниже.AES C# Шифрование шифрования FIPS
Но я получаю «Указанный вектор инициализации (IV) не соответствует размеру блока для этого алгоритма».
Я застрял на этом некоторое время и не могу найти хороший простой пример и попробовал комбинацию вещей.
Ниже мой код на C#. Я старался, чтобы это было очень просто.
string AesPlainText = "1654001d3e1e9bbd036a2f26d9a77b7f";
string AesKey = "3ccb6039c354c9de72adc9ffe9f719c2c8257446c1eb4b86f2a5b981713cf998";
string AesIV = "ce7d4f9679dfc3930bc79aab81e11723";
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
aes.KeySize = 256;
aes.IV = HexToByteArray(AesIV);
aes.Key = HexToByteArray(AesKey);
aes.Mode = CipherMode.CBC;
// Convert string to byte array
byte[] src = Encoding.Unicode.GetBytes(AesPlainText);
// encryption
using (ICryptoTransform encrypt = aes.CreateEncryptor())
{
byte[] dest = encrypt.TransformFinalBlock(src, 0, src.Length);
// Convert byte array to Base64 strings
Console.WriteLine(Convert.ToBase64String(dest));
}
ОБНОВЛЕНО НА ОТВЕТ:
Спасибо, большое наблюдение. Я изменил Encoding.UTF8.GetBytes, чтобы использовать HexToByteArray в приведенном выше примере, и теперь он работает.
public static byte[] HexToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars/2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i/2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
Спасибо ниже, это функция, которую я добавил, которая, похоже, разрешает мою проблему и позволяет запускать шифрование. –