没有合适的资源?快使用搜索试试~ 我知道了~
C#实现AES的加解密算法C#实现AES的加解密算法C#实现AES的加解密算法
资源推荐
资源详情
资源评论
C#实现AES的加解密
顺便提一下,有些人搞不懂为什么加密后数据会变长,这是因为对称加密算法是分组加密,也就是按照预先设定好的块大小进行加密。加密时,首先将明文进行分块,对于最后一块,如果少于块的大小,是需要进行填充的。因此有不同的填充模式。还有有的时候,解密数据时报错:数据长度不符合要求时,也多半是由于程序中加密出了错,因为加密后的密文应该是块大小的整数倍的。.NET中的密码算法可以进行很多配置,还可以进行扩展。如采用不同的链接模式,填充模式、块大小,密钥长度等。需要详细了解的话可以先看一下对称加密的基础知识,再参考下MSDN。下面是用C#实现的AES加解密算法:AES密钥默认长度是128位的。代码如下:
view plaincopy to clipboardprint?
01.using System;
02.using System.Security.Cryptography;
03.using System.Text;
04.using System.IO;
05.
06.namespace GraduationDesign
07.{
08. class AESEncryption
09. {
10. //默认密钥向量
11. private static byte[] _key1 = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
12.
13. /// <summary>
14. /// AES加密算法
15. /// </summary>
16. /// <param name="plainText">明文字符串</param>
17. /// <param name="strKey">密钥</param>
18. /// <returns>返回加密后的密文字节数组</returns>
19. public static byte[] AESEncrypt(string plainText , string strKey )
20. {
21. //分组加密算法
22. SymmetricAlgorithm des = Rijndael .Create () ;
23. byte[] inputByteArray =Encoding .UTF8 .GetBytes (plainText ) ;//得到需要加密的字节数组
24. //设置密钥及密钥向量
25. des.Key =Encoding.UTF8.GetBytes (strKey );
26. des.IV = _key1 ;
顺便提一下,有些人搞不懂为什么加密后数据会变长,这是因为对称加密算法是分组加密,也就是按照预先设定好的块大小进行加密。加密时,首先将明文进行分块,对于最后一块,如果少于块的大小,是需要进行填充的。因此有不同的填充模式。还有有的时候,解密数据时报错:数据长度不符合要求时,也多半是由于程序中加密出了错,因为加密后的密文应该是块大小的整数倍的。.NET中的密码算法可以进行很多配置,还可以进行扩展。如采用不同的链接模式,填充模式、块大小,密钥长度等。需要详细了解的话可以先看一下对称加密的基础知识,再参考下MSDN。下面是用C#实现的AES加解密算法:AES密钥默认长度是128位的。代码如下:
view plaincopy to clipboardprint?
01.using System;
02.using System.Security.Cryptography;
03.using System.Text;
04.using System.IO;
05.
06.namespace GraduationDesign
07.{
08. class AESEncryption
09. {
10. //默认密钥向量
11. private static byte[] _key1 = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
12.
13. /// <summary>
14. /// AES加密算法
15. /// </summary>
16. /// <param name="plainText">明文字符串</param>
17. /// <param name="strKey">密钥</param>
18. /// <returns>返回加密后的密文字节数组</returns>
19. public static byte[] AESEncrypt(string plainText , string strKey )
20. {
21. //分组加密算法
22. SymmetricAlgorithm des = Rijndael .Create () ;
23. byte[] inputByteArray =Encoding .UTF8 .GetBytes (plainText ) ;//得到需要加密的字节数组
24. //设置密钥及密钥向量
25. des.Key =Encoding.UTF8.GetBytes (strKey );
26. des.IV = _key1 ;
27. MemoryStream ms = new MemoryStream();
28. CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
29. cs.Write(inputByteArray, 0, inputByteArray.Length);
30. cs.FlushFinalBlock();
31. byte[] cipherBytes = ms .ToArray () ;//得到加密后的字节数组
32. cs.Close();
33. ms.Close();
34. return cipherBytes ;
35. }
36.
37. /// <summary>
38. /// AES解密
39. /// </summary>
40. /// <param name="cipherText">密文字节数组</param>
41. /// <param name="strKey">密钥</param>
42. /// <returns>返回解密后的字符串</returns>
43. public static byte[] AESDecrypt(byte[] cipherText , string strKey )
44. {
45. SymmetricAlgorithm des = Rijndael .Create () ;
46. des.Key =Encoding.UTF8.GetBytes (strKey );
47. des.IV = _key1 ;
48. byte[] decryptBytes = new byte[cipherText .Length ] ;
49. MemoryStream ms = new MemoryStream(cipherText ) ;
50. CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor (), CryptoStreamMode.Read );
51. cs.Read (decryptBytes , 0, decryptBytes.Length);
52. cs.Close();
53. ms.Close();
54. return decryptBytes ;
55. }
56.}
28. CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
29. cs.Write(inputByteArray, 0, inputByteArray.Length);
30. cs.FlushFinalBlock();
31. byte[] cipherBytes = ms .ToArray () ;//得到加密后的字节数组
32. cs.Close();
33. ms.Close();
34. return cipherBytes ;
35. }
36.
37. /// <summary>
38. /// AES解密
39. /// </summary>
40. /// <param name="cipherText">密文字节数组</param>
41. /// <param name="strKey">密钥</param>
42. /// <returns>返回解密后的字符串</returns>
43. public static byte[] AESDecrypt(byte[] cipherText , string strKey )
44. {
45. SymmetricAlgorithm des = Rijndael .Create () ;
46. des.Key =Encoding.UTF8.GetBytes (strKey );
47. des.IV = _key1 ;
48. byte[] decryptBytes = new byte[cipherText .Length ] ;
49. MemoryStream ms = new MemoryStream(cipherText ) ;
50. CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor (), CryptoStreamMode.Read );
51. cs.Read (decryptBytes , 0, decryptBytes.Length);
52. cs.Close();
53. ms.Close();
54. return decryptBytes ;
55. }
56.}
剩余5页未读,继续阅读
资源评论
- 平凡的旅程2014-08-20这个我百度里就搜到了,只是原封不动复制上传罢了,没用
- littledu1234562014-03-18c#写的,和自己所需要的语言不符合,不过也还行
Auinny
- 粉丝: 40
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功