AES算法是什么,这里就没有必要多说了。
这是曾经的一个小项目用到的,貌似也没有几行代码。
我不清楚这个是不是标准的AES算法,但是我要的目的已经实现了。
反正我也不是多么重要的数据,只要能实现不能反向解密就足够了。
首先要准备下面几个常量
1 2 3 4 5 6 7 8 9
| private static byte[] _key= { 0x32, 0x08, 0x30, 0x09, 0xA3, 0x06, 0xB9, 0x07, 0xB9, 0x1F, 0x12, 0x03, 0xC9, 0x17, 0x8A, 0x36 };
private static string strKey = "ywmt";
private static string salt = "SomeString";
|
然后下面是加密算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public static string AESEncrypt(string str) { str = str + salt; SymmetricAlgorithm aes = Rijndael.Create(); byte[] inputByte = Encoding.UTF8.GetBytes(str); aes.Key = Encoding.UTF8.GetBytes(getMd5(strKey)); aes.IV = _key; MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(inputByte, 0, inputByte.Length); cs.FlushFinalBlock(); byte[] cipher = ms.ToArray(); cs.Close(); ms.Close(); return Convert.ToBase64String(cipher); }
|
这里返回的加密后的字符串。
最后是解密算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public static string AESDecrypt(string cipher) { SymmetricAlgorithm aes = Rijndael.Create(); byte[] inputCipher = Convert.FromBase64String(cipher); aes.Key = Encoding.UTF8.GetBytes(getMd5(strKey)); aes.IV = _key; byte[] decryptBytes = new byte[inputCipher.Length]; MemoryStream ms = new MemoryStream(inputCipher); CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read); cs.Read(decryptBytes, 0, decryptBytes.Length); cs.Close(); ms.Close(); string re = Encoding.UTF8.GetString(decryptBytes).Replace("\0", "");
return re.Replace(salt, ""); }
|
一些说明