博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C#]AES加密算法实现
阅读量:6002 次
发布时间:2019-06-20

本文共 4186 字,大约阅读时间需要 13 分钟。

      密码学中的高级加密标准(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         ///  13         /// 解密 14         ///  15         /// 需要解密的内容 16         /// 
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 /// 54 /// 加密 55 /// 56 /// 需要加密的内容 57 ///
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 #endregion103 }

可以和序列化配合使用。

转载地址:http://osbmx.baihongyu.com/

你可能感兴趣的文章
zabbix3.2源码升级至3.4
查看>>
Apache源码编译安装详解
查看>>
npm被墙解决方法
查看>>
实现Redis高可用
查看>>
可登录的用户数量是1.6万个,软件的性能得到充分的考验
查看>>
一次次小进步,从毕业开始,你到现在飞跃了几次了,程序人生也不容易?
查看>>
卸载 mac 自带的php
查看>>
84个SEO面试问题---网络营销新手老手都值得一看
查看>>
Hadoop2.6.0学习笔记(八)Hadoop启动脚本介绍
查看>>
万众创新:你是一个优秀的程序员吗?
查看>>
CentOS 7 关闭触控板
查看>>
支付宝---手机APP支付
查看>>
关于使用mb_strlen函数报错处理
查看>>
Linux学习笔记3.1-Linux文件管理类命令详解
查看>>
SQL Server 环形缓冲区(Ring Buffer) -- RING_BUFFER_MEMORY_BROKER 诊断内部内存压力
查看>>
vsftpd.conf内配置参数说明
查看>>
mac pro python tab补全脚本
查看>>
How to Disable SSL 2.0 and SSL 3.0 in IIS 7
查看>>
spring框架util包中的StringUtils类主要是处理关于字符串
查看>>
试验性的Numpy教程(译)
查看>>