C#中使用AES加密和解密JSON数据

开发 安全
本文将展示如何使用C#进行AES加密和解密,特别是针对JSON数据。我们将分几个步骤来完成这个任务。

在网络安全领域,数据的加密和解密是至关重要的。AES(Advanced Encryption Standard)是一种广泛使用的加密算法,提供了高强度的数据加密。在C#中,我们可以利用内置的加密库来轻松地实现AES加密和解密。

本文将展示如何使用C#进行AES加密和解密,特别是针对JSON数据。我们将分几个步骤来完成这个任务:

设置AES密钥和初始化向量

AES加密需要一个密钥(Key)和一个初始化向量(IV)。密钥用于加密和解密数据,而初始化向量则用于确保加密的随机性。

private static byte[] key = Encoding.UTF8.GetBytes("YourSecretKey12345");
private static byte[] iv = Encoding.UTF8.GetBytes("1234567890123456");

注意:在实际应用中,密钥和初始化向量应该是随机生成的,并且应该妥善保管。

创建AES加密和解密的方法

我们可以使用AesCryptoServiceProvider类来执行AES加密和解密。以下是一个简单的示例:

public static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
{
    if (plainText == null || plainText.Length <= 0)
        throw new ArgumentNullException(nameof(plainText));
    if (Key == null || Key.Length <= 0)
        throw new ArgumentNullException(nameof(Key));
    if (IV == null || IV.Length <= 0)
        throw new ArgumentNullException(nameof(IV));

    byte[] encrypted;

    using (Aes aesAlg = Aes.Create())
    {
        aesAlg.Key = Key;
        aesAlg.IV = IV;

        ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

        using (MemoryStream msEncrypt = new MemoryStream())
        {
            using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                {
                    swEncrypt.Write(plainText);
                }
                encrypted = msEncrypt.ToArray();
            }
        }
    }

    return encrypted;
}

public static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
{
    if (cipherText == null || cipherText.Length <= 0)
        throw new ArgumentNullException(nameof(cipherText));
    if (Key == null || Key.Length <= 0)
        throw new ArgumentNullException(nameof(Key));
    if (IV == null || IV.Length <= 0)
        throw new ArgumentNullException(nameof(IV));

    string plaintext = null;

    using (Aes aesAlg = Aes.Create())
    {
        aesAlg.Key = Key;
        aesAlg.IV = IV;

        ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

        using (MemoryStream msDecrypt = new MemoryStream(cipherText))
        {
            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                {
                    plaintext = srDecrypt.ReadToEnd();
                }
            }
        }
    }

    return plaintext;
}

加密和解密JSON数据

假设我们有一个JSON对象,我们可以先将其序列化为字符串,然后使用上述方法进行加密和解密。以下是一个示例:

var jsonObject = new { Name = "John Doe", Age = 30 };
string jsonString = JsonConvert.SerializeObject(jsonObject);

byte[] encrypted = EncryptStringToBytes_Aes(jsonString, key, iv);
string decrypted = DecryptStringFromBytes_Aes(encrypted, key, iv);

Console.WriteLine("Original JSON: " + jsonString);
Console.WriteLine("Encrypted: " + Convert.ToBase64String(encrypted));
Console.WriteLine("Decrypted: " + decrypted);

在这个示例中,我们首先创建了一个简单的JSON对象,并将其序列化为字符串。然后,我们使用之前定义的EncryptStringToBytes_Aes方法进行加密,并将加密后的字节数组转换为Base64字符串以进行显示。最后,我们使用DecryptStringFromBytes_Aes方法进行解密,并显示解密后的字符串。

注意事项

  • 确保密钥和初始化向量的长度符合AES算法的要求。对于AES-256,密钥应为32字节,初始化向量应为16字节。
  • 在实际应用中,密钥和初始化向量应该是随机生成的,并且应该妥善保管。不要硬编码在代码中,也不要以明文形式存储。
  • 加密和解密过程中要确保使用相同的密钥和初始化向量。
  • 对于大型数据,可能需要考虑分块加密和解密,以避免内存溢出问题。

总结

本文展示了如何在C#中使用AES算法加密和解密JSON数据。通过内置的AesCryptoServiceProvider类,我们可以轻松地实现高强度的数据加密,保护数据的机密性和完整性。在实际应用中,还需要考虑密钥管理、错误处理和数据完整性验证等方面的问题。

责任编辑:赵宁宁 来源: 后端Q
相关推荐

2021-05-08 05:56:15

加密OpenSSL密钥

2021-02-01 08:00:00

vimLinux加密

2015-03-26 14:19:53

GPG加密解密

2024-03-01 09:58:44

2015-05-19 08:58:08

加密解密GnuPG

2023-09-01 09:31:48

2023-03-06 08:49:02

加密和解密SpringBoot

2023-09-04 14:00:28

加密密钥私钥

2015-03-26 11:25:10

对称加密加密压缩加密解密解压

2021-07-18 11:43:58

Linux密码加密

2022-09-26 08:35:53

磁盘Java解密

2020-12-31 07:31:10

C# 反射数据

2023-12-13 12:27:46

2009-08-13 18:12:11

C#数据加密

2021-03-07 16:37:52

C#应用程序

2021-02-01 12:36:59

C# Channels存储

2023-08-01 07:24:05

2024-01-26 16:32:08

2021-01-18 05:18:18

C# 8模式C# 7

2021-01-19 05:30:55

C# 8异步流IEnumerable
点赞
收藏

51CTO技术栈公众号