用C#实现AES加密和解密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。

需要加入引用 using System.Security.Cryptography;

 

 
  1. /// <summary> 
  2.         /// 有密码的AES加密   
  3.         /// </summary> 
  4.         /// <param name="text">加密字符</param> 
  5.         /// <param name="password">加密的密码</param> 
  6.         /// <param name="iv">密钥</param> 
  7.         /// <returns></returns> 
  8.         public static string AESEncrypt(string text, string password, string iv)  
  9.         {  
  10.             RijndaelManaged rijndaelCipher = new RijndaelManaged();  
  11.  
  12.             rijndaelCipher.Mode = CipherMode.CBC;  
  13.  
  14.             rijndaelCipher.Padding = PaddingMode.PKCS7;  
  15.  
  16.             rijndaelCipher.KeySize = 128;  
  17.  
  18.             rijndaelCipher.BlockSize = 128;  
  19.  
  20.             byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);  
  21.  
  22.             byte[] keyBytes = new byte[16];  
  23.  
  24.             int len = pwdBytes.Length;  
  25.  
  26.             if (len > keyBytes.Length) len = keyBytes.Length;  
  27.  
  28.             System.Array.Copy(pwdBytes, keyBytes, len);  
  29.  
  30.             rijndaelCipher.Key = keyBytes;  
  31.  
  32.  
  33.             byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);  
  34.             rijndaelCipher.IV = ivBytes;  
  35.  
  36.             ICryptoTransform transform = rijndaelCipher.CreateEncryptor();  
  37.  
  38.             byte[] plainText = Encoding.UTF8.GetBytes(text);  
  39.  
  40.             byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);  
  41.  
  42.             return Convert.ToBase64String(cipherBytes);  
  43.  
  44.         }  
  45.  
  46.         /// <summary> 
  47.         /// 随机生成密钥  
  48.         /// </summary> 
  49.         /// <returns></returns> 
  50.         public static string GetIv(int n)  
  51.         {  
  52.             char[] arrChar = new char[]{  
  53.            'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x',  
  54.            '0','1','2','3','4','5','6','7','8','9',  
  55.            'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z'  
  56.           };  
  57.  
  58.             StringBuilder num = new StringBuilder();  
  59.  
  60.             Random rnd = new Random(DateTime.Now.Millisecond);  
  61.             for (int i = 0; i < n; i++)  
  62.             {  
  63.                 num.Append(arrChar[rnd.Next(0, arrChar.Length)].ToString());  
  64.  
  65.             }  
  66.  
  67.             return num.ToString();  
  68.         }  
  69.  
  70.         /// <summary> 
  71.         /// AES解密  
  72.         /// </summary> 
  73.         /// <param name="text"></param> 
  74.         /// <param name="password"></param> 
  75.         /// <param name="iv"></param> 
  76.         /// <returns></returns> 
  77.         public static string AESDecrypt(string text, string password, string iv)  
  78.         {  
  79.             RijndaelManaged rijndaelCipher = new RijndaelManaged();  
  80.  
  81.             rijndaelCipher.Mode = CipherMode.CBC;  
  82.  
  83.             rijndaelCipher.Padding = PaddingMode.PKCS7;  
  84.  
  85.             rijndaelCipher.KeySize = 128;  
  86.  
  87.             rijndaelCipher.BlockSize = 128;  
  88.  
  89.             byte[] encryptedData = Convert.FromBase64String(text);  
  90.  
  91.             byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);  
  92.  
  93.             byte[] keyBytes = new byte[16];  
  94.  
  95.             int len = pwdBytes.Length;  
  96.  
  97.             if (len > keyBytes.Length) len = keyBytes.Length;  
  98.  
  99.             System.Array.Copy(pwdBytes, keyBytes, len);  
  100.  
  101.             rijndaelCipher.Key = keyBytes;  
  102.  
  103.             byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);  
  104.             rijndaelCipher.IV = ivBytes;  
  105.  
  106.             ICryptoTransform transform = rijndaelCipher.CreateDecryptor();  
  107.  
  108.             byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);  
  109.  
  110.             return Encoding.UTF8.GetString(plainText);  
  111.  
  112.         } 

 

本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078718



相关文章
|
6天前
|
算法 安全 数据安全/隐私保护
基于AES的遥感图像加密算法matlab仿真
本程序基于MATLAB 2022a实现,采用AES算法对遥感图像进行加密与解密。主要步骤包括:将彩色图像灰度化并重置大小为256×256像素,通过AES的字节替换、行移位、列混合及轮密钥加等操作完成加密,随后进行解密并验证图像质量(如PSNR值)。实验结果展示了原图、加密图和解密图,分析了图像直方图、相关性及熵的变化,确保加密安全性与解密后图像质量。该方法适用于保护遥感图像中的敏感信息,在军事、环境监测等领域具有重要应用价值。
|
7月前
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【9月更文挑战第9天】随着数字化时代的到来,信息安全问题日益凸显。本文将介绍如何使用Python结合AES与RSA两种加密算法,构建强大的加密工具。AES以其高效性和强安全性著称,适用于大量数据的快速加密;RSA作为非对称加密算法,在加密小量数据及实现数字签名方面表现卓越。通过整合两者,可以构建既安全又灵活的加密系统。首先,需要安装pycryptodome库。接着,实现AES加密与解密功能,最后利用RSA加密AES密钥,确保其安全传输。这种设计不仅提高了数据传输效率,还增强了密钥交换的安全性,为敏感数据提供坚实保护。
279 43
|
7月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
124 1
|
6月前
|
存储 安全 算法
C#一分钟浅谈:数据加密与解密技术
【10月更文挑战第3天】在数字化时代,信息安全至关重要。数据加密作为保障信息不被未授权访问的有效手段,通过特定算法将明文转换为密文,确保即使数据被截获也难以解读。本文从基础概念入手,介绍C#中实现数据加密的方法,涵盖对称加密(如AES、DES)与非对称加密(如RSA),并通过具体示例代码演示如何使用`System.Security.Cryptography.Aes`类完成AES加密和解密过程。此外,还强调了密钥管理及安全策略的重要性。
140 4
|
7月前
|
数据安全/隐私保护
aes之ecb模式的加密解密
aes之ecb模式的加密解密
|
7月前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
223 8
|
7月前
|
安全 算法 数据安全/隐私保护
深度揭秘!Python加密技术的背后,AES与RSA如何守护你的数据安全
【9月更文挑战第10天】随着数字化时代的到来,数据安全成为企业和个人面临的重大挑战。Python 作为功能强大的编程语言,在数据加密领域扮演着重要角色。AES 和 RSA 是两种主流加密算法,分别以对称和非对称加密方式保障数据安全。AES(Advanced Encryption Standard)因其高效性和安全性,在数据加密中广泛应用;而 RSA 则利用公钥和私钥机制,在密钥交换和数字签名方面表现卓越。
117 3
|
7月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
169 1
|
6月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
271 0
|
7月前
|
安全 算法 数据安全/隐私保护
黑客克星!Python加密艺术大公开,AES、RSA双剑合璧,守护你的数字世界
在这个数据泛滥的时代,数字世界既充满了知识,也潜藏安全隐患。Python 作为强大的编程语言,以其独特的加密技术为我们的信息安全保驾护航。本文将介绍 AES 和 RSA 这两种加密算法,揭示它们如何协同工作,保护你的数字世界。AES(高级加密标准)以其高效、安全著称,能将敏感信息转化为难以破解的乱码。Python 的 `pycryptodome` 库让 AES 加密变得简单易行。然而,AES 面临密钥分发难题,此时 RSA(非对称加密算法)便大显身手,通过公钥加密、私钥解密的方式确保密钥传输安全。AES 与 RSA 在 Python 中交织成一道坚不可摧的防护网,共同守护我们的数字世界。
145 0