[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 ...
随机推荐
- nyoj 139 我排第几个--康拓展开
我排第几个 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说 ...
- jenkins忘记管理密码处理方式
进入/var/lib/jenkins/ 用vim编辑 config.xml文件 找到useSecurity部分 将true改成false 并且删除下面的 授权部分 保存推出 3.从新进入 ...
- spring mvc 和junit 4集成的注意点
常规步骤: 1.导入jar包,主要有两个,spring-test 和 junit4,主要用maven管理,直接依赖即可.可以在这个网站上进行查找或下载:http://mvnrepository.com ...
- log4j日志优先级问题的后续
前文:http://www.cnblogs.com/chyu/p/4280440.html 出现一处吐槽失误,当时还想怎么会设置成warn级别.. <appender name="ST ...
- AngularJS模块加载
配置块 在模块的加载阶段,AngularJS会在提供者注册和配置的过程中对模块进行配置.在整个AngularJS的工作流中,这个阶段是唯一能够在应用启动前进行修改的部分. angular.module ...
- 再学TSQL基础--单表查询
本内容是我学习tsql2008的阅读笔记 什么是关系模型? 若对列创建唯一约束,背后中的物理机制也是创建了一个唯一索引. SQL语句的逻辑解析顺序是FROM WHERE GROUP BY HAVING ...
- openPOWERLINK开源POWERLINK协议栈说明文档中文非官方翻译
GitBook分享,翻译进行中:https://winshton.gitbooks.io/openpowerlink-stack-cn/content/
- HTML meta viewport属性详解
什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机 ...
- 打包Android:Error building Player: CommandInvokationFailure
错误log Error building Player: CommandInvokationFailure: Unable to determine the tools version of the ...
- 关于软件测试人员能力模型的建立(from知乎)
转自: http://www.zhihu.com/question/20254092 测试思维方面:1.测试基础理论(测试流程.测试的基础知识)2.测试用例设计方法论(黑盒.白盒)3.软件质量体系(建 ...