Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# 加密解密

作者:苏染瞳°   发布日期:2025-10-03   浏览:80

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

public class EncryptionDecryptionExample
{
    // 加密方法
    public static string Encrypt(string plainText, string key)
    {
        using (Aes aesAlg = Aes.Create())
        {
            byte[] keyBytes = Encoding.UTF8.GetBytes(key);
            byte[] iv = new byte[aesAlg.BlockSize / 8]; // 使用默认的IV

            // 设置加密密钥和IV
            if (keyBytes.Length != aesAlg.KeySize / 8)
            {
                throw new ArgumentException("Key must be of length " + aesAlg.KeySize / 8);
            }

            aesAlg.Key = keyBytes;
            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);
                    }
                    return Convert.ToBase64String(msEncrypt.ToArray());
                }
            }
        }
    }

    // 解密方法
    public static string Decrypt(string cipherText, string key)
    {
        using (Aes aesAlg = Aes.Create())
        {
            byte[] keyBytes = Encoding.UTF8.GetBytes(key);
            byte[] iv = new byte[aesAlg.BlockSize / 8]; // 使用默认的IV

            // 设置解密密钥和IV
            if (keyBytes.Length != aesAlg.KeySize / 8)
            {
                throw new ArgumentException("Key must be of length " + aesAlg.KeySize / 8);
            }

            aesAlg.Key = keyBytes;
            aesAlg.IV = iv;

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

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

    // 测试方法
    public static void Main()
    {
        string original = "Here is some data to encrypt!";
        string key = "ThisIsASecretKey"; // 密钥必须是32字节(256位)

        try
        {
            string encrypted = Encrypt(original, key);
            Console.WriteLine("Encrypted: " + encrypted);

            string decrypted = Decrypt(encrypted, key);
            Console.WriteLine("Decrypted: " + decrypted);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }
}

解释说明:

  1. 加密方法 (Encrypt)

    • 使用 Aes 对称加密算法。
    • 将明文转换为字节数组并使用指定的密钥和初始化向量 (IV) 进行加密。
    • 最终将加密后的字节数组转换为 Base64 编码的字符串返回。
  2. 解密方法 (Decrypt)

    • 使用相同的 Aes 算法和密钥/IV 对 Base64 编码的密文进行解密。
    • 将解密后的字节数组转换回原始字符串。
  3. 测试方法 (Main)

    • 创建一个示例字符串并对其进行加密和解密,输出结果以验证正确性。

请注意,实际应用中应避免使用硬编码的 IV,并确保密钥的安全存储和管理。

上一篇:rabbitmq c#

下一篇:c# 发送post请求

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

c#网络编程

c# rectangle

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站