- Write codes to implement the extended Euclid algorithm to determine the inverse of a given integer.
- Implement the AES algorithm, and submmit the codes and a report to introduce your program by using some test cases.
运行截图
验证
1、在线验证http://tool.chacuo.net/cryptaes
2、使用高级语言提供的类库验证
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main(string[] args)
{
AesCryptoServiceProvider provider = new AesCryptoServiceProvider
{
Mode = CipherMode.ECB,
Padding = PaddingMode.Zeros,
Key = Encoding.ASCII.GetBytes("1234567890123456")
};
using (MemoryStream memoryStream = new MemoryStream())
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, provider.CreateEncryptor(), CryptoStreamMode.Write))
{
byte[] plainBytes = Encoding.GetEncoding("GB2312").GetBytes("HelloWorldHelloWorldHelloWorldHelloWorld");
cryptoStream.Write(plainBytes, 0, plainBytes.Length);
cryptoStream.FlushFinalBlock();
string hexString = ByteArrayToHexString(memoryStream.ToArray());
Console.WriteLine(hexString);
}
Console.ReadLine();
}
public static string ByteArrayToHexString(byte[] data)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in data)
{
sb.Append(((int)b).ToString("X2"));
}
return sb.ToString().ToUpper();
}
}
完整代码
实验环境:VS2010
已知bug:输入密钥长度不足16个字符(128位)时,加密结果不正确,是由于没有对密钥不足部分进行填充导致
另外,跟上一个实验一样,new之后没有delete,所以会有内存泄漏(C#写习惯了)