0


C#语言基础问题16:C# 中如何进行加密和解密操作?

在 C# 中,可以使用以下几种常见的加密算法进行加密和解密操作:

  1. 对称加密算法:使用相同的密钥对数据进行加密和解密,常见的对称加密算法有 DES、3DES、AES 等。
  2. 非对称加密算法:使用公钥和私钥进行加密和解密,常见的非对称加密算法有 RSA、DSA 等。
  3. 散列算法:将数据映射为固定长度的散列值,不可逆,常见的散列算法有 MD5、SHA1、SHA256、SHA512 等。

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

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

class Program
{
    static void Main(string[] args)
    {
        string text = "Hello, world!"; // 待加密的字符串
        string key = "this is a secret key"; // 密钥,需要保密

        // 加密
        byte[] encrypted = EncryptAes(text, key);
        Console.WriteLine("Encrypted string: " + Convert.ToBase64String(encrypted));

        // 解密
        string decrypted = DecryptAes(encrypted, key);
        Console.WriteLine("Decrypted string: " + decrypted);
    }

    // 使用 AES 对称加密算法加密数据
    static byte[] EncryptAes(string text, string key)
    {
        byte[] keyBytes = Encoding.UTF8.GetBytes(key);
        using (Aes aes = Aes.Create())
        {
            aes.Key = keyBytes;
            aes.Mode = CipherMode.ECB;
            aes.Padding = PaddingMode.PKCS7;

            byte[] textBytes = Encoding.UTF8.GetBytes(text);
            using (ICryptoTransform encryptor = aes.CreateEncryptor())
            {
                return encryptor.TransformFinalBlock(textBytes, 0, textBytes.Length);
            }
        }
    }

    // 使用 AES 对称加密算法解密数据
    static string DecryptAes(byte[] encrypted, string key)
    {
        byte[] keyBytes = Encoding.UTF8.GetBytes(key);
        using (Aes aes = Aes.Create())
        {
            aes.Key = keyBytes;
            aes.Mode = CipherMode.ECB;
            aes.Padding = PaddingMode.PKCS7;

            using (ICryptoTransform decryptor = aes.CreateDecryptor())
            {
                byte[] decryptedBytes = decryptor.TransformFinalBlock(encrypted, 0, encrypted.Length);
                return Encoding.UTF8.GetString(decryptedBytes);
            }
        }
    }
}

在这个示例中,我们使用了 AES 对称加密算法对字符串进行加密和解密。在加密时,我们首先将密钥转换为字节数组,然后创建一个 AES 对象,并设置加密模式、填充方式和密钥。接着,将要加密的字符串转换为字节数组,使用 CreateEncryptor 方法创建一个加密器,将加密器应用到数据上,最后返回加密后的字节数组。

在解密时,我们使用密钥和加密后的字节数组创建一个 AES 对象,并设置加密模式、填充方式和密钥。然后,使用 CreateDecryptor 方法创建一个解密器,将解密器应用到加密后的字节数组上,最后将解密后的字节数组转换为字符串。

除了对称加密算法,C# 中还提供了其他的加密算法,如 RSA 非对称加密算法和 MD5 散列算法。使用 RSA 非对称加密算法时,需要生成一对公钥和私钥,并将公钥用于加密数据,私钥用于解密数据。使用 MD5 散列算法时,可以将数据映射为一个 128 位的散列值,该散列值在理论上不可逆。

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

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

class Program
{
    static void Main(string[] args)
    {
        string text = "Hello, world!"; // 待加密的字符串

        // 创建 RSA 对象并生成公钥和私钥
        using (RSA rsa = RSA.Create())
        {
            string publicKey = Convert.ToBase64String(rsa.ExportRSAPublicKey());
            string privateKey = Convert.ToBase64String(rsa.ExportRSAPrivateKey());

            Console.WriteLine("Public key: " + publicKey);
            Console.WriteLine("Private key: " + privateKey);

            // 加密
            byte[] encrypted = EncryptRsa(text, publicKey);
            Console.WriteLine("Encrypted string: " + Convert.ToBase64String(encrypted));

            // 解密
            string decrypted = DecryptRsa(encrypted, privateKey);
            Console.WriteLine("Decrypted string: " + decrypted);
        }
    }

    // 使用 RSA 非对称加密算法加密数据
    static byte[] EncryptRsa(string text, string publicKey)
    {
        byte[] publicKeyBytes = Convert.FromBase64String(publicKey);
        using (RSA rsa = RSA.Create())
        {
            rsa.ImportRSAPublicKey(publicKeyBytes, out _);

            byte[] textBytes = Encoding.UTF8.GetBytes(text);
            byte[] encryptedBytes = rsa.Encrypt(textBytes, RSAEncryptionPadding.Pkcs1);

            return encryptedBytes;
        }
    }

    // 使用 RSA 非对称加密算法解密数据
    static string DecryptRsa(byte[] encrypted, string privateKey)
    {
        byte[] privateKeyBytes = Convert.FromBase64String(privateKey);
        using (RSA rsa = RSA.Create())
        {
            rsa.ImportRSAPrivateKey(privateKeyBytes, out _);

            byte[] decryptedBytes = rsa.Decrypt(encrypted, RSAEncryptionPadding.Pkcs1);
            string decryptedText = Encoding.UTF8.GetString(decryptedBytes);

            return decryptedText;
        }
    }
}

在这个示例中,我们首先创建了一个 RSA 对象,并使用 ExportRSAPublicKey 和 ExportRSAPrivateKey 方法生成公钥和私钥。在加密时,我们将公钥转换为字节数组,使用 RSA.Create 方法创建一个 RSA 对象,并使用 ImportRSAPublicKey 方法导入公钥。然后,将要加密的字符串转换为字节数组,使用 Encrypt 方法进行加密,最后返回加密后的字节数组。

在解密时,我们将私钥转换为字节数组,使用 RSA.Create 方法创建一个 RSA 对象,并使用ImportRSAPrivateKey 方法导入私钥。然后,将加密后的字节数组传递给 Decrypt 方法进行解密,最后将解密后的字节数组转换为字符串并返回。

对于使用 MD5 散列算法进行加密的示例代码,可以参考以下代码:

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

class Program
{
    static void Main(string[] args)
    {
        string text = "Hello, world!"; // 待加密的字符串

        // 计算散列值
        byte[] hash = ComputeMd5Hash(text);
        Console.WriteLine("MD5 hash: " + Convert.ToBase64String(hash));
    }

    // 使用 MD5 散列算法计算散列值
    static byte[] ComputeMd5Hash(string text)
    {
        byte[] textBytes = Encoding.UTF8.GetBytes(text);
        using (MD5 md5 = MD5.Create())
        {
            byte[] hashBytes = md5.ComputeHash(textBytes);
            return hashBytes;
        }
    }
}

在这个示例中,我们首先将要加密的字符串转换为字节数组,然后使用 MD5.Create 方法创建一个 MD5 对象,并使用 ComputeHash 方法计算散列值,最后返回散列值的字节数组。由于 MD5 散列值在理论上不可逆,因此这种方式一般用于数据的校验或者简单的加密场景。

总的来说,C# 中提供了多种加密算法和库,可以根据不同的需求选择合适的算法进行加密和解密操作。

标签: c# 安全

本文转载自: https://blog.csdn.net/lainiao110/article/details/129026531
版权归原作者 来鸟 所有, 如有侵权,请联系我们删除。

“C#语言基础问题16:C# 中如何进行加密和解密操作?”的评论:

还没有评论