C# 加密解密浅析

C# 加密解密浅析

编码文章call10242025-01-06 21:00:0324A+A-

C# 中提供了多种加密解密算法和相关类库,可以用来保护数据的安全性。下面将简单介绍几种常用的加密解密算法,并给出相应的实例。

  1. 对称加密算法(Symmetric Encryption): 对称加密算法使用相同的密钥进行加密和解密,是最常见的加密算法之一。C# 中提供了 System.Security.Cryptography 命名空间,其中包含了一些常用的对称加密算法,如 AES、DES 和 TripleDES。

下面是一个使用 AES 算法进行对称加密和解密的示例:

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

public class Program
{
    public static void Main()
    {
        string plainText = "Hello, World!"; // 待加密的明文
        
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.GenerateKey();
            aesAlg.GenerateIV();
            
            byte[] encryptedData = EncryptStringToBytes_Aes(plainText, aesAlg.Key, aesAlg.IV);
            
            string decryptedText = DecryptStringFromBytes_Aes(encryptedData, aesAlg.Key, aesAlg.IV);
            
            Console.WriteLine("Plaintext: " + plainText);
            Console.WriteLine("Encrypted data: " + Convert.ToBase64String(encryptedData));
            Console.WriteLine("Decrypted text: " + decryptedText);
        }
    }

    static byte[] EncryptStringToBytes_Aes(string plainText, byte[] key, byte[] iv)
    {
        byte[] encrypted;
        
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = key;
            aesAlg.IV = iv;

            ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
            
            using (var msEncrypt = new System.IO.MemoryStream())
            {
                using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (var swEncrypt = new System.IO.StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(plainText);
                    }
                    
                    encrypted = msEncrypt.ToArray();
                }
            }
        }
        
        return encrypted;
    }

    static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] key, byte[] iv)
    {
        string plaintext = null;

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

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

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

        return plaintext;
    }
}
  1. 非对称加密算法(Asymmetric Encryption): 非对称加密算法使用一对密钥,即公钥和私钥,其中公钥用于加密数据,私钥用于解密数据。C# 中的 System.Security.Cryptography 命名空间中提供了 RSA 算法的实现。

下面是一个使用 RSA 算法进行非对称加密和解密的示例:

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

public class Program
{
    public static void Main()
    {
        string plainText = "Hello, World!"; // 待加密的明文
        
        using (RSA rsa = RSA.Create())
        {
            byte[] encryptedData = EncryptStringToBytes_RSA(plainText, rsa.ExportRSAPublicKey());
            
            string decryptedText = DecryptStringFromBytes_RSA(encryptedData, rsa.ExportRSAPrivateKey());
            
            Console.WriteLine("Plaintext: " + plainText);
            Console.WriteLine("Encrypted data: " + Convert.ToBase64String(encryptedData));
            Console.WriteLine("Decrypted text: " + decryptedText);
        }
    }

    static byte[] EncryptStringToBytes_RSA(string plainText, RSAParameters publicKey)
    {
        byte[] encrypted;
        
        using (RSA rsa = RSA.Create())
        {
            rsa.ImportRSAPublicKey(publicKey, out _);
            encrypted = rsa.Encrypt(Encoding.UTF8.GetBytes(plainText), RSAEncryptionPadding.OaepSHA256);
        }
        
        return encrypted;
    }

    static string DecryptStringFromBytes_RSA(byte[] cipherText, RSAParameters privateKey)
    {
        string plaintext = null;

        using (RSA rsa = RSA.Create())
        {
            rsa.ImportRSAPrivateKey(privateKey, out _);
            byte[] decryptedBytes = rsa.Decrypt(cipherText, RSAEncryptionPadding.OaepSHA256);
            plaintext = Encoding.UTF8.GetString(decryptedBytes);
        }

        return plaintext;
    }
}
  1. 散列算法(Hashing): 散列算法将任意长度的数据映射为固定长度的哈希值,不可逆且唯一。在 C# 中,System.Security.Cryptography 命名空间提供了多种散列算法的实现,如 MD5、SHA1、SHA256 等。

下面是一个使用 MD5 算法生成哈希值的示例:

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

public class Program
{
    public static void Main()
    {
        string plainText = "Hello, World!"; // 待加密的明文
        
        string hashValue = GetMD5Hash(plainText);
            
        Console.WriteLine("Plaintext: " + plainText);
        Console.WriteLine("Hash value: " + hashValue);
    }

    static string GetMD5Hash(string input)
    {
        using (MD5 md5Hash = MD5.Create())
        {
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
            StringBuilder sBuilder = new StringBuilder();

            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            return sBuilder.ToString();
        }
    }
}

以上是 C# 中常用的加密解密算法的解释和示例,你可以根据自己的需求选择合适的算法来保护数据的安全性。

创作不易,如果您喜欢还请帮忙点赞关注,谢谢![作揖]

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4