AES加解密
阿新 • • 發佈:2017-05-17
ext ole gen public 去掉 ati 默認 cal algo
public class AESHelper { /// <summary> /// 獲取密鑰 /// </summary> private static string IDKey { get { return "3vZ8rRLUME4b3K8xXovptGodOUXSCjrc"; } } private static string nameKey {get { return "1a54CRZ7WdwGYdNPonWkSMtHyRhlnv6q"; } } //默認密鑰向量 private static byte[] _key1 = { 0x7f, 0x0a, 0x2d, 0x96, 0x94, 0xa5, 0xc2, 0x7b, 0xaa, 0x89, 0x00, 0x8b, 0xf3, 0xab, 0x15, 0xfd }; /// <summary> /// AES加密算法 /// </summary>/// <param name="plainText">明文字符串</param> /// <returns>將加密後的密文轉換為Base64編碼,以便顯示</returns> public static string AESEncryptID(string plainText) { //分組加密算法 SymmetricAlgorithm aes = Rijndael.Create(); byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字節數組 //設置密鑰及密鑰向量 aes.Key = Encoding.UTF8.GetBytes(IDKey); aes.IV = _key1; byte[] cipherBytes = null; using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); cipherBytes = ms.ToArray();//得到加密後的字節數組 cs.Close(); ms.Close(); } } return Convert.ToBase64String(cipherBytes); } public static string AESEncryptName(string plainText) { //分組加密算法 SymmetricAlgorithm aes = Rijndael.Create(); byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字節數組 //設置密鑰及密鑰向量 aes.Key = Encoding.UTF8.GetBytes(nameKey); aes.IV = _key1; byte[] cipherBytes = null; using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); cipherBytes = ms.ToArray();//得到加密後的字節數組 cs.Close(); ms.Close(); } } return Convert.ToBase64String(cipherBytes); } /// <summary> /// AES解密 /// </summary> /// <param name="cipherText">密文字符串</param> /// <returns>返回解密後的明文字符串</returns> public static string AESDecryptId(string showText) { byte[] cipherText = Convert.FromBase64String(showText); SymmetricAlgorithm aes = Rijndael.Create(); aes.Key = Encoding.UTF8.GetBytes(IDKey); aes.IV = _key1; byte[] decryptBytes = new byte[cipherText.Length]; using (MemoryStream ms = new MemoryStream(cipherText)) { using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read)) { cs.Read(decryptBytes, 0, decryptBytes.Length); cs.Close(); ms.Close(); } } return Encoding.UTF8.GetString(decryptBytes).Replace("\0", ""); ///將字符串後尾的‘\0‘去掉 } public static string AESDecryptName(string showText) { byte[] cipherText = Convert.FromBase64String(showText); SymmetricAlgorithm aes = Rijndael.Create(); aes.Key = Encoding.UTF8.GetBytes(nameKey); aes.IV = _key1; byte[] decryptBytes = new byte[cipherText.Length]; using (MemoryStream ms = new MemoryStream(cipherText)) { using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read)) { cs.Read(decryptBytes, 0, decryptBytes.Length); cs.Close(); ms.Close(); } } return Encoding.UTF8.GetString(decryptBytes).Replace("\0", ""); ///將字符串後尾的‘\0‘去掉 } public static void genKey() { var generator = new RijndaelManaged(); var key = Convert.ToBase64String(generator.Key); byte[] iv = generator.IV; Console.WriteLine(key); Console.WriteLine(generator.IV); } }
Key:為32位的字符
byte:0-255之間的16進制數字
AES加解密