密码学中的高级加密标准(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[].MaxSize;
  27. //获取或设置用于对称算法的密钥大小(以位为单位)。
  28. aes.KeySize = aes.LegalKeySizes[].MaxSize;
  29. //获取或设置用于对称算法的密钥。
  30. aes.Key = rfc.GetBytes(aes.KeySize / );
  31. //获取或设置用于对称算法的初始化向量 (IV)。
  32. aes.IV = rfc.GetBytes(aes.BlockSize / );
  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, , 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[].MaxSize;
  81. aes.KeySize = aes.LegalKeySizes[].MaxSize;
  82. aes.Key = rfc.GetBytes(aes.KeySize / );
  83. aes.IV = rfc.GetBytes(aes.BlockSize / );
  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, , data.Length);
  97. encryptor.Close();
  98.  
  99. return encryptStream.ToArray();
  100. }
  101.  
  102. #endregion
  103. }

可以和序列化配合使用。

[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. IE6-8中Date不支持toISOString方法

    Date.prototype.toISOString方法是在ES5里添加的,ES3文档中没有,如下 这个方法在IE6/7/8中不支持,可按下面方式修复下 if (!Date.prototype.toI ...

  2. 如何定制你自己的jQuery

    jQuery随着版本的不断升级代码量也随之增加,从1.0.0的不到两千行到现在的1.10.2已经突破1万行. 新的API不断增加,但有些在项目中并没有用到.jQuery团队很早就考虑到这一点,按模块来 ...

  3. Dos

    一.简介 https://zh.wikipedia.org/wiki/DOS 二.系统下载 http://www.cn-dos.net/newdos/doswarea.htm 三.实用命令 1)查看系 ...

  4. GitHub中wiki的Markdown编辑方法!!

    Hello MarkDown!正常的文本 一级大标题用一个#号 一级中等标题用两个#号 一级小标题用三个#号(一次类推,一共有6级标题) 下面是无序列表 无序标题1-只需要在标题前面加上*号就可以了或 ...

  5. CANopen DS301协议中文翻译V03版

    V0.1版PDF格式供下载参考,只是全面框架翻译,会有大量错误和不确定的地方,希望读者积极参与校对,提供修改意见,完善译文.下载 V0.2版校对提前完成,下载地址 V0.3版使用GitBook编辑(h ...

  6. 非ios系统是否还有出路?

    **@SoftwareTeacher**        这位老师提出的问题我很喜欢,所以单拿出一篇文章,认真的回复.        PS: 因学校网很差,所以现在才来回复哈,见谅.以下为正文     ...

  7. UVALive 6663 Count the Regions --离散化+DFS染色

    题意:给你n(n<=50)个矩形(左上角坐标和右下角坐标),问这些矩形总共将平面分成多少个部分.坐标值可能有1e9. 分析:看到n和坐标的范围,容易想到离散化,当时就没想到离散化以后怎么判断区域 ...

  8. mysql创建表

    说明:此文件包含了blog数据库中建立所有的表的Mysql语句. 在sql语句中注意“约束的概念": 1.实体完整性约束(主键--唯一且非空) primary key() 违约处理:No a ...

  9. 【转载】Jmeter获取响应结果中参数出现的次数

    在测试中,有时候会遇到要统计响应结果中某个参数出现了多少次,如果量级很大,一个一个数不太现实,下面讲一下实现自动打印出该参数出现的次数的方法. 例如我的响应信息为:{"ip":&q ...

  10. linux运维中的命令梳理(一)

    在linux日常运维中,我们平时会用到很多常规的操作命令. 下面对常用命令进行梳理: 命令行日常系快捷键(不分大小写)CTRL + A 移动光标到行首CTRL + E 移动光标到行末CTRL + U ...