QQ登录

只需要一步,快速开始

APP扫码登录

只需要一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 164|回复: 0

[C#/.NET] C#中使用AES加密和解密JSON数据

[复制链接]

等级头衔

积分成就    金币 : 2841
   泡泡 : 1516
   精华 : 6
   在线时间 : 1294 小时
   最后登录 : 2024-11-21

丰功伟绩

优秀达人突出贡献荣誉管理论坛元老

联系方式
发表于 2024-10-17 07:52:43 | 显示全部楼层 |阅读模式
在网络安全领域,数据的加密和解密是至关重要的。AES(Advanced Encryption Standard)是一种广泛使用的加密算法,提供了高强度的数据加密。在C#中,我们可以利用内置的加密库来轻松地实现AES加密和解密。" r9 _( S; w7 z3 |; r9 O
本文将展示如何使用C#进行AES加密和解密,特别是针对JSON数据。我们将分几个步骤来完成这个任务:; @9 K9 t& c! c6 e
1、设置AES密钥和初始化向量
- o$ l" Y7 t& R! Y5 a8 Y+ ~AES加密需要一个密钥(Key)和一个初始化向量(IV)。密钥用于加密和解密数据,而初始化向量则用于确保加密的随机性。% z; R) {$ }0 @8 ]- h2 J3 w4 I$ g1 I& t
  1. private static byte[] key = Encoding.UTF8.GetBytes("YourSecretKey12345");
  2. private static byte[] iv = Encoding.UTF8.GetBytes("1234567890123456");
注意:在实际应用中,密钥和初始化向量应该是随机生成的,并且应该妥善保管。
. }1 t- g* W# B4 C2、创建AES加密和解密的方法3 j" H1 {( {2 ~( h& Z
我们可以使用AesCryptoServiceProvider类来执行AES加密和解密。以下是一个简单的示例:7 }2 ^% j( k; U
  1. public static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
  2. {
  3.     if (plainText == null || plainText.Length <= 0)
  4.         throw new ArgumentNullException(nameof(plainText));
  5.     if (Key == null || Key.Length <= 0)
  6.         throw new ArgumentNullException(nameof(Key));
  7.     if (IV == null || IV.Length <= 0)
  8.         throw new ArgumentNullException(nameof(IV));
  9.     byte[] encrypted;
  10.     using (Aes aesAlg = Aes.Create())
  11.     {
  12.         aesAlg.Key = Key;
  13.         aesAlg.IV = IV;
  14.         ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
  15.         using (MemoryStream msEncrypt = new MemoryStream())
  16.         {
  17.             using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
  18.             {
  19.                 using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
  20.                 {
  21.                     swEncrypt.Write(plainText);
  22.                 }
  23.                 encrypted = msEncrypt.ToArray();
  24.             }
  25.         }
  26.     }
  27.     return encrypted;
  28. }
  29. public static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
  30. {
  31.     if (cipherText == null || cipherText.Length <= 0)
  32.         throw new ArgumentNullException(nameof(cipherText));
  33.     if (Key == null || Key.Length <= 0)
  34.         throw new ArgumentNullException(nameof(Key));
  35.     if (IV == null || IV.Length <= 0)
  36.         throw new ArgumentNullException(nameof(IV));
  37.     string plaintext = null;
  38.     using (Aes aesAlg = Aes.Create())
  39.     {
  40.         aesAlg.Key = Key;
  41.         aesAlg.IV = IV;
  42.         ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
  43.         using (MemoryStream msDecrypt = new MemoryStream(cipherText))
  44.         {
  45.             using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
  46.             {
  47.                 using (StreamReader srDecrypt = new StreamReader(csDecrypt))
  48.                 {
  49.                     plaintext = srDecrypt.ReadToEnd();
  50.                 }
  51.             }
  52.         }
  53.     }
  54.     return plaintext;
  55. }
3、加密和解密JSON数据
7 s6 L; W& {5 b! S% [- r( P假设我们有一个JSON对象,我们可以先将其序列化为字符串,然后使用上述方法进行加密和解密。以下是一个示例:/ h* B8 k1 e8 T( J1 i1 U/ B# ~1 `% p
  1. var jsonObject = new { Name = "John Doe", Age = 30 };
  2. string jsonString = JsonConvert.SerializeObject(jsonObject);
  3. byte[] encrypted = EncryptStringToBytes_Aes(jsonString, key, iv);
  4. string decrypted = DecryptStringFromBytes_Aes(encrypted, key, iv);
  5. Console.WriteLine("Original JSON: " + jsonString);
  6. Console.WriteLine("Encrypted: " + Convert.ToBase64String(encrypted));
  7. Console.WriteLine("Decrypted: " + decrypted);
在这个示例中,我们首先创建了一个简单的JSON对象,并将其序列化为字符串。然后,我们使用之前定义的EncryptStringToBytes_Aes方法进行加密,并将加密后的字节数组转换为Base64字符串以进行显示。最后,我们使用DecryptStringFromBytes_Aes方法进行解密,并显示解密后的字符串。7 }# B. A1 r+ q& A
4、注意事项
" P5 c5 d2 f' a& v0 q- p& B# t7 d
  • 确保密钥和初始化向量的长度符合AES算法的要求。对于AES-256,密钥应为32字节,初始化向量应为16字节。
  • 在实际应用中,密钥和初始化向量应该是随机生成的,并且应该妥善保管。不要硬编码在代码中,也不要以明文形式存储。
  • 加密和解密过程中要确保使用相同的密钥和初始化向量。
  • 对于大型数据,可能需要考虑分块加密和解密,以避免内存溢出问题。
    - ]4 w$ ~8 W& \
5、总结
/ ^2 t* X3 t/ m本文展示了如何在C#中使用AES算法加密和解密JSON数据。通过内置的AesCryptoServiceProvider类,我们可以轻松地实现高强度的数据加密,保护数据的机密性和完整性。在实际应用中,还需要考虑密钥管理、错误处理和数据完整性验证等方面的问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|paopaomj.COM ( 渝ICP备18007172号|渝公网安备50010502503914号 )

GMT+8, 2024-11-21 14:23

Powered by paopaomj X3.5 © 2016-2025 sitemap

快速回复 返回顶部 返回列表