public static byte[] AesEncrypt(byte[] key, byte[] iv, byte[] data)
{
byte[] encrypted;
using (AesManaged aes = new AesManaged())
{
aes.Key = key;
aes.IV = iv;
aes.BlockSize = 128;
ICryptoTransform aesEnc = aes.CreateEncryptor();
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, aesEnc, CryptoStreamMode.Write))
{
csEncrypt.Write(data, 0, data.Length);
encrypted = msEncrypt.ToArray();
}
}
}
return encrypted;
}
public static void Main()
{
var key = new byte[] { 78, 47, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
var iv = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
var data = new byte[] { 78, 47, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
var result = AesEncrypt(key, iv, data);
}
в .net Framework, результат всегда будет возвращать
89, 156, 29, 52, 98, 240, 113, 210, 16, 211, 121, 61, 53, 174, 12, 229
< /code>
В .net он возвращает совершенно разные значения. В верхней части этого значение каждый раз отличается (как это было бы случайно). < /P>
После некоторой дополнительной проверки я обнаружил, что использование < /p>
Aes aes = Aes.Create()
< /code>
вместо < /p>
AesManaged aes = new AesManaged()
< /code>
в .NET Framework приведет к тому же поведению, что и в .NET. Поэтому я понимаю, что приложение .NET реализует aesmanaged (), называя то же самое, что и aes.create (), в качестве запасного. < /P>
Почему это поведение происходит? Для того же самого IV/Key/Data Data, не должны ли результат шифрования точно таким же? Я, должно быть, чего -то упускаю.
Я переношу приложение из .NET Framework в .net и заметил некоторую разницу в поведении после преобразования.[code]public static byte[] AesEncrypt(byte[] key, byte[] iv, byte[] data) { byte[] encrypted; using (AesManaged aes = new AesManaged()) { aes.Key = key; aes.IV = iv; aes.BlockSize = 128; ICryptoTransform aesEnc = aes.CreateEncryptor();
using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, aesEnc, CryptoStreamMode.Write)) { csEncrypt.Write(data, 0, data.Length); encrypted = msEncrypt.ToArray(); } } } return encrypted; }
public static void Main() {
var key = new byte[] { 78, 47, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; var iv = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; var data = new byte[] { 78, 47, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
var result = AesEncrypt(key, iv, data); } [/code] в .net Framework, результат всегда будет возвращать 89, 156, 29, 52, 98, 240, 113, 210, 16, 211, 121, 61, 53, 174, 12, 229 < /code> В .net он возвращает совершенно разные значения. В верхней части этого значение каждый раз отличается (как это было бы случайно). < /P> После некоторой дополнительной проверки я обнаружил, что использование < /p> Aes aes = Aes.Create() < /code> вместо < /p> AesManaged aes = new AesManaged() < /code> в .NET Framework приведет к тому же поведению, что и в .NET. Поэтому я понимаю, что приложение .NET реализует aesmanaged (), называя то же самое, что и aes.create (), в качестве запасного. < /P> Почему это поведение происходит? Для того же самого IV/Key/Data Data, не должны ли результат шифрования точно таким же? Я, должно быть, чего -то упускаю.