密码学中的高级加密标准(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加密算法实现的更多相关文章

  1. AES加密算法C++实现

    我从网上下载了一套AES加密算法的C++实现,代码如下: (1)aes.h #ifndef SRC_UTILS_AES_H #define SRC_UTILS_AES_H class AES { pu ...

  2. PHP android ios相互兼容的AES加密算法

    APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...

  3. Qt使用AES加密算法对字符串进行加密

          因工作需要,需要对字符串进行加密处理,在网上找了很长时间,终于找到了一个可以使用的aes加密算法.其源代码采用c++编写而成,但其头文件引用windows.h,经过修改部分代码,将#inc ...

  4. Android AES加密算法及事实上现

    昨天老大叫我看看android加密算法.于是网上找了找,找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  5. iOS,Android,.NET通用AES加密算法

    原文:iOS,Android,.NET通用AES加密算法 这两天为移动App开发API,结果实现加密验证时碰到一大坑.这里不得不吐槽下又臭又硬的iOS,Windows Server无法解密出正确的结果 ...

  6. Android AES加密算法,现在实际上

    昨天,老板让我来看看android加密算法.于是在网上找了找,发现AES加密算法.(当然,MD5,BASE64什么http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  7. 【转】PHP android ios相互兼容的AES加密算法

    APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...

  8. .NET工行E生活接入AES加密算法的吐槽-2018

    工行E生活V2版本AES加密算法 吐槽一下工行的java算法,真的是非标准的,参考了java代码,还参考了php代码终于搞定了. 真的是很坑,很坑.中间还涉及到多重加密之类的,一行行把代码翻译成C#代 ...

  9. 【java编程】加密算法-对称加密及AES加密算法

    转载:https://www.jianshu.com/p/3840b344b27c?utm_campaign=maleskine&utm_content=note&utm_medium ...

  10. AES 加密算法 跨语言

    aes加密算法 delphi .java.c# .网页在线工具 4个相同 AES/ECB/PKCS5Padding 与网页在线工具加密结果相同 http://tool.chacuo.net/crypt ...

随机推荐

  1. Linux主流發行版本介紹

    一.简介 而工欲善其事,必先利其器,Linux的世界相當廣大,除了最著名的Ubuntu以外還有不少發行版.然文人相輕,自古皆然,了解不同發行版的優勢不只嘴上攻防用的上,也是學Linux一個有趣的地方! ...

  2. 10901 Missile

    10901 Missile 时间限制:1000MS  内存限制:65535K提交次数:40 通过次数:7 Description Long, long ago, country A invented ...

  3. [转]angularjs 设置全局变量的3种方法

    本文转自:http://blog.51yip.com/jsjquery/1601.html angularjs自身有二种,设置全局变量的方法,在加上js的设置全局变量的方法,总共有三种.要实现的功能是 ...

  4. 在vscode中使用Git

    用了git最方便的就是比如在公司写了很多代码后回到家打开vscode只需要点击一下pull就能全部同步过来.是不是很方便....毕竟之前我都是拿u盘拷贝回家或者存到云盘再下载下来.. 我这里用的是国内 ...

  5. DFS cdoevs 3100 蜗牛

    cdoevs 3100 蜗牛  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题目描述 Description 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在 ...

  6. OC基础数据类型-NSSet

    1.集合:集合(NSSet)和数组(NSArray)有相似之处,都是存储不同的对象的地址:不过NSArray是有序的集合,NSSet是无序的集合.集合是一种哈希表,运用散列算法,查找集合中的元素比数组 ...

  7. Java虚拟机详解01----初识JVM

    主要内容如下: JVM的概念 JVM发展历史 JVM种类 Java语言规范 JVM规范 一.JVM的概念: JVM: Java Virtual Machine,意为Java虚拟机. 虚拟机: 指通过软 ...

  8. WPF数字输入框和IP地址输入框

    数字输入框 简介 在业务中,我们经常需要限制用户的输入,比如限制输入长度,限制只能输入数字等等.限制输入长度WPF内置的TextBox已经帮我们解决了,但是限制输入数字却并未在WPF中内置解决方案.使 ...

  9. MongoDB学习(五)Linux环境安装MongoDB

    一.   下载 从http://www.mongodb.org/downloads地址中下载:mongodb-linux-x86_64-2.4.11.tar 二.  安装 1>设置mongoDB ...

  10. 本地不安装Oracle,plsql远程连接数据库

    由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql.toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持.最后终于发现一个很有效的方法,Or ...