[C#]AES加密算法实现
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
(以上来自百度)
c#aes算法实现的辅助类
- public static class AesSecret
- {
- #region 秘钥对
- private const string saltString = "Wolfy@home";
- private const string pWDString = "home@Wolfy";
- #endregion
- #region 加/解密算法
- /// <summary>
- /// 解密
- /// </summary>
- /// <param name="sSource">需要解密的内容</param>
- /// <returns></returns>
- public static byte[] DecryptString(string strSource)
- {
- byte[] encryptBytes = Convert.FromBase64String(strSource);
- byte[] salt = Encoding.UTF8.GetBytes(saltString);
- //提供高级加密标准 (AES) 对称算法的托管实现。
- AesManaged aes = new AesManaged();
- //通过使用基于 System.Security.Cryptography.HMACSHA1 的伪随机数生成器,实现基于密码的密钥派生功能 (PBKDF2)。
- Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(pWDString, salt);
- // 获取或设置加密操作的块大小(以位为单位)。
- aes.BlockSize = aes.LegalBlockSizes[].MaxSize;
- //获取或设置用于对称算法的密钥大小(以位为单位)。
- aes.KeySize = aes.LegalKeySizes[].MaxSize;
- //获取或设置用于对称算法的密钥。
- aes.Key = rfc.GetBytes(aes.KeySize / );
- //获取或设置用于对称算法的初始化向量 (IV)。
- aes.IV = rfc.GetBytes(aes.BlockSize / );
- // 用当前的 Key 属性和初始化向量 IV 创建对称解密器对象
- System.Security.Cryptography.ICryptoTransform decryptTransform = aes.CreateDecryptor();
- // 解密后的输出流
- MemoryStream decryptStream = new MemoryStream();
- // 将解密后的目标流(decryptStream)与解密转换(decryptTransform)相连接
- CryptoStream decryptor = new CryptoStream(
- decryptStream, decryptTransform, CryptoStreamMode.Write);
- // 将一个字节序列写入当前 CryptoStream (完成解密的过程)
- decryptor.Write(encryptBytes, , encryptBytes.Length);
- decryptor.Close();
- // 将解密后所得到的流转换为字符串
- return decryptStream.ToArray();
- }
- /// <summary>
- /// 加密
- /// </summary>
- /// <param name="sSource">需要加密的内容</param>
- /// <returns></returns>
- public static byte[] EncryptString(string strSource)
- {
- byte[] data = UTF8Encoding.UTF8.GetBytes(strSource);
- byte[] salt = UTF8Encoding.UTF8.GetBytes(saltString);
- // AesManaged - 高级加密标准(AES) 对称算法的管理类
- AesManaged aes = new AesManaged();
- // Rfc2898DeriveBytes - 通过使用基于 HMACSHA1 的伪随机数生成器,实现基于密码的密钥派生功能 (PBKDF2 - 一种基于密码的密钥派生函数)
- // 通过 密码 和 salt 派生密钥
- Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(pWDString, salt);
- /*
- * AesManaged.BlockSize - 加密操作的块大小(单位:bit)
- * AesManaged.LegalBlockSizes - 对称算法支持的块大小(单位:bit)
- * AesManaged.KeySize - 对称算法的密钥大小(单位:bit)
- * AesManaged.LegalKeySizes - 对称算法支持的密钥大小(单位:bit)
- * AesManaged.Key - 对称算法的密钥
- * AesManaged.IV - 对称算法的密钥大小
- * Rfc2898DeriveBytes.GetBytes(int 需要生成的伪随机密钥字节数) - 生成密钥
- */
- aes.BlockSize = aes.LegalBlockSizes[].MaxSize;
- aes.KeySize = aes.LegalKeySizes[].MaxSize;
- aes.Key = rfc.GetBytes(aes.KeySize / );
- aes.IV = rfc.GetBytes(aes.BlockSize / );
- // 用当前的 Key 属性和初始化向量 IV 创建对称加密器对象
- ICryptoTransform encryptTransform = aes.CreateEncryptor();
- // 加密后的输出流
- MemoryStream encryptStream = new MemoryStream();
- // 将加密后的目标流(encryptStream)与加密转换(encryptTransform)相连接
- CryptoStream encryptor = new CryptoStream
- (encryptStream, encryptTransform, CryptoStreamMode.Write);
- // 将一个字节序列写入当前 CryptoStream (完成加密的过程)
- encryptor.Write(data, , data.Length);
- encryptor.Close();
- return encryptStream.ToArray();
- }
- #endregion
- }
可以和序列化配合使用。
[C#]AES加密算法实现的更多相关文章
- AES加密算法C++实现
我从网上下载了一套AES加密算法的C++实现,代码如下: (1)aes.h #ifndef SRC_UTILS_AES_H #define SRC_UTILS_AES_H class AES { pu ...
- PHP android ios相互兼容的AES加密算法
APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...
- Qt使用AES加密算法对字符串进行加密
因工作需要,需要对字符串进行加密处理,在网上找了很长时间,终于找到了一个可以使用的aes加密算法.其源代码采用c++编写而成,但其头文件引用windows.h,经过修改部分代码,将#inc ...
- Android AES加密算法及事实上现
昨天老大叫我看看android加密算法.于是网上找了找,找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了 ...
- iOS,Android,.NET通用AES加密算法
原文:iOS,Android,.NET通用AES加密算法 这两天为移动App开发API,结果实现加密验证时碰到一大坑.这里不得不吐槽下又臭又硬的iOS,Windows Server无法解密出正确的结果 ...
- Android AES加密算法,现在实际上
昨天,老板让我来看看android加密算法.于是在网上找了找,发现AES加密算法.(当然,MD5,BASE64什么http://snowolf.iteye.com/blog/379860这篇文章列举了 ...
- 【转】PHP android ios相互兼容的AES加密算法
APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...
- .NET工行E生活接入AES加密算法的吐槽-2018
工行E生活V2版本AES加密算法 吐槽一下工行的java算法,真的是非标准的,参考了java代码,还参考了php代码终于搞定了. 真的是很坑,很坑.中间还涉及到多重加密之类的,一行行把代码翻译成C#代 ...
- 【java编程】加密算法-对称加密及AES加密算法
转载:https://www.jianshu.com/p/3840b344b27c?utm_campaign=maleskine&utm_content=note&utm_medium ...
- AES 加密算法 跨语言
aes加密算法 delphi .java.c# .网页在线工具 4个相同 AES/ECB/PKCS5Padding 与网页在线工具加密结果相同 http://tool.chacuo.net/crypt ...
随机推荐
- IE6-8中Date不支持toISOString方法
Date.prototype.toISOString方法是在ES5里添加的,ES3文档中没有,如下 这个方法在IE6/7/8中不支持,可按下面方式修复下 if (!Date.prototype.toI ...
- 如何定制你自己的jQuery
jQuery随着版本的不断升级代码量也随之增加,从1.0.0的不到两千行到现在的1.10.2已经突破1万行. 新的API不断增加,但有些在项目中并没有用到.jQuery团队很早就考虑到这一点,按模块来 ...
- Dos
一.简介 https://zh.wikipedia.org/wiki/DOS 二.系统下载 http://www.cn-dos.net/newdos/doswarea.htm 三.实用命令 1)查看系 ...
- GitHub中wiki的Markdown编辑方法!!
Hello MarkDown!正常的文本 一级大标题用一个#号 一级中等标题用两个#号 一级小标题用三个#号(一次类推,一共有6级标题) 下面是无序列表 无序标题1-只需要在标题前面加上*号就可以了或 ...
- CANopen DS301协议中文翻译V03版
V0.1版PDF格式供下载参考,只是全面框架翻译,会有大量错误和不确定的地方,希望读者积极参与校对,提供修改意见,完善译文.下载 V0.2版校对提前完成,下载地址 V0.3版使用GitBook编辑(h ...
- 非ios系统是否还有出路?
**@SoftwareTeacher** 这位老师提出的问题我很喜欢,所以单拿出一篇文章,认真的回复. PS: 因学校网很差,所以现在才来回复哈,见谅.以下为正文 ...
- UVALive 6663 Count the Regions --离散化+DFS染色
题意:给你n(n<=50)个矩形(左上角坐标和右下角坐标),问这些矩形总共将平面分成多少个部分.坐标值可能有1e9. 分析:看到n和坐标的范围,容易想到离散化,当时就没想到离散化以后怎么判断区域 ...
- mysql创建表
说明:此文件包含了blog数据库中建立所有的表的Mysql语句. 在sql语句中注意“约束的概念": 1.实体完整性约束(主键--唯一且非空) primary key() 违约处理:No a ...
- 【转载】Jmeter获取响应结果中参数出现的次数
在测试中,有时候会遇到要统计响应结果中某个参数出现了多少次,如果量级很大,一个一个数不太现实,下面讲一下实现自动打印出该参数出现的次数的方法. 例如我的响应信息为:{"ip":&q ...
- linux运维中的命令梳理(一)
在linux日常运维中,我们平时会用到很多常规的操作命令. 下面对常用命令进行梳理: 命令行日常系快捷键(不分大小写)CTRL + A 移动光标到行首CTRL + E 移动光标到行末CTRL + U ...