密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦*采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
(以上来自百度)
c#aes算法实现的辅助类
1 public static class AesSecret 2 { 3 #region 秘钥对 4 5 private const string saltString = "Wolfy@home"; 6 private const string pWDString = "home@Wolfy"; 7 8 #endregion 9 10 #region 加/解密算法 11 12 /// <summary> 13 /// 解密 14 /// </summary> 15 /// <param name="sSource">需要解密的内容</param> 16 /// <returns></returns> 17 public static byte[] DecryptString(string strSource) 18 { 19 byte[] encryptBytes = Convert.FromBase64String(strSource); 20 byte[] salt = Encoding.UTF8.GetBytes(saltString); 21 //提供高级加密标准 (AES) 对称算法的托管实现。 22 AesManaged aes = new AesManaged(); 23 //通过使用基于 System.Security.Cryptography.HMACSHA1 的伪随机数生成器,实现基于密码的密钥派生功能 (PBKDF2)。 24 Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(pWDString, salt); 25 // 获取或设置加密操作的块大小(以位为单位)。 26 aes.BlockSize = aes.LegalBlockSizes[0].MaxSize; 27 //获取或设置用于对称算法的密钥大小(以位为单位)。 28 aes.KeySize = aes.LegalKeySizes[0].MaxSize; 29 //获取或设置用于对称算法的密钥。 30 aes.Key = rfc.GetBytes(aes.KeySize / 8); 31 //获取或设置用于对称算法的初始化向量 (IV)。 32 aes.IV = rfc.GetBytes(aes.BlockSize / 8); 33 34 // 用当前的 Key 属性和初始化向量 IV 创建对称解密器对象 35 System.Security.Cryptography.ICryptoTransform decryptTransform = aes.CreateDecryptor(); 36 37 // 解密后的输出流 38 MemoryStream decryptStream = new MemoryStream(); 39 40 // 将解密后的目标流(decryptStream)与解密转换(decryptTransform)相连接 41 CryptoStream decryptor = new CryptoStream( 42 decryptStream, decryptTransform, CryptoStreamMode.Write); 43 44 // 将一个字节序列写入当前 CryptoStream (完成解密的过程) 45 decryptor.Write(encryptBytes, 0, encryptBytes.Length); 46 decryptor.Close(); 47 48 // 将解密后所得到的流转换为字符串 49 return decryptStream.ToArray(); 50 51 } 52 53 /// <summary> 54 /// 加密 55 /// </summary> 56 /// <param name="sSource">需要加密的内容</param> 57 /// <returns></returns> 58 public static byte[] EncryptString(string strSource) 59 { 60 byte[] data = UTF8Encoding.UTF8.GetBytes(strSource); 61 byte[] salt = UTF8Encoding.UTF8.GetBytes(saltString); 62 63 // AesManaged - 高级加密标准(AES) 对称算法的管理类 64 AesManaged aes = new AesManaged(); 65 66 // Rfc2898DeriveBytes - 通过使用基于 HMACSHA1 的伪随机数生成器,实现基于密码的密钥派生功能 (PBKDF2 - 一种基于密码的密钥派生函数) 67 // 通过 密码 和 salt 派生密钥 68 Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(pWDString, salt); 69 70 /* 71 * AesManaged.BlockSize - 加密操作的块大小(单位:bit) 72 * AesManaged.LegalBlockSizes - 对称算法支持的块大小(单位:bit) 73 * AesManaged.KeySize - 对称算法的密钥大小(单位:bit) 74 * AesManaged.LegalKeySizes - 对称算法支持的密钥大小(单位:bit) 75 * AesManaged.Key - 对称算法的密钥 76 * AesManaged.IV - 对称算法的密钥大小 77 * Rfc2898DeriveBytes.GetBytes(int 需要生成的伪随机密钥字节数) - 生成密钥 78 */ 79 80 aes.BlockSize = aes.LegalBlockSizes[0].MaxSize; 81 aes.KeySize = aes.LegalKeySizes[0].MaxSize; 82 aes.Key = rfc.GetBytes(aes.KeySize / 8); 83 aes.IV = rfc.GetBytes(aes.BlockSize / 8); 84 85 // 用当前的 Key 属性和初始化向量 IV 创建对称加密器对象 86 ICryptoTransform encryptTransform = aes.CreateEncryptor(); 87 88 // 加密后的输出流 89 MemoryStream encryptStream = new MemoryStream(); 90 91 // 将加密后的目标流(encryptStream)与加密转换(encryptTransform)相连接 92 CryptoStream encryptor = new CryptoStream 93 (encryptStream, encryptTransform, CryptoStreamMode.Write); 94 95 // 将一个字节序列写入当前 CryptoStream (完成加密的过程) 96 encryptor.Write(data, 0, data.Length); 97 encryptor.Close(); 98 99 return encryptStream.ToArray(); 100 } 101 102 #endregion 103 }
可以和序列化配合使用。
博客地址: | http://www.cnblogs.com/wolf-sun/ |
博客版权: | 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。 如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。 转载:http://www.cnblogs.com/wolf-sun/p/3380453.html |