我需要在C#上實現一些加密協議,並且想要說這是我在C#中的第一個項目。花了一些時間在C#上使用後,我發現我無法獲得兼容的AES矢量。.NET AES返回錯誤測試向量
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
public static void Main()
{
try
{
byte[] key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte[] data = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte[] encTest = { 0x0e, 0xdd, 0x33, 0xd3, 0xc6, 0x21, 0xe5, 0x46, 0x45, 0x5b, 0xd8, 0xba, 0x14, 0x18, 0xbe, 0xc8 };
AesManaged aesAlg = new AesManaged();
aesAlg.BlockSize = 128;
aesAlg.Key = key;
aesAlg.Mode = CipherMode.ECB;
aesAlg.Padding = PaddingMode.None;
ICryptoTransform encryptor = aesAlg.CreateEncryptor();
MemoryStream msEncrypt = new MemoryStream();
CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
csEncrypt.Write(data, 0,data.Length);
byte[] encr;
encr = msEncrypt.ToArray();
string datastr = BitConverter.ToString(data);
string encrstr = BitConverter.ToString(encr);
string encTestStr = BitConverter.ToString(encTest);
Console.WriteLine("data: {0}", datastr);
Console.WriteLine("encr: {0}", encrstr);
Console.WriteLine("should: {0}", encTestStr);
Console.ReadKey();
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e.Message);
}
}
}
}
輸出是錯誤的:
data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
encr: A0-3C-C2-22-A4-32-F7-C9-BA-36-AE-73-66-BD-BB-A3
should: 0E-DD-33-D3-C6-21-E5-46-45-5B-D8-BA-14-18-BE-C8
我確信這是.NET中正確的AES實現,所以我需要一些建議從.NET嚮導來幫助與此有關。
編輯
我剛剛發現。 必須PaddingMode.None然後工作。 我粘貼了工作代碼。不管怎麼說,還是要謝謝你。
C#沒有AES實現。 .NET Framework有一個AES實現。 – 2010-05-09 22:41:28