📜  dotnet core 加解密 - C# (1)

📅  最后修改于: 2023-12-03 14:40:51.940000             🧑  作者: Mango

Dotnet Core 加解密 - C#

在现代的应用程序中,数据的安全性是非常重要的。加密和解密数据是保护数据不被未经授权的访问的一种方法。在这篇文章中,我们将讨论如何在 .NET Core 应用程序中进行加密和解密操作。

加密和解密算法

在进行加密和解密操作之前,我们需要选择合适的算法。 .NET Core 提供了很多加密和解密算法,包括:

  • 对称加密算法 AESDES3DES
  • 非对称加密算法 RSADSA
  • 哈希算法 MD5SHA1SHA256SHA384SHA512

这些算法都有各自的特点和适用场景。在选择算法时,我们需要考虑以下因素:

  • 加密后的数据大小
  • 加密速度
  • 安全性
对称加密算法

对称加密算法使用相同的密钥进行加密和解密。其中最常用的算法是 AES。下面给出一个使用 AES 算法进行加密和解密的示例代码。

加密
using System;
using System.Security.Cryptography;
using System.Text;

public static string EncryptString(string plainText, byte[] key, byte[] iv)
{
    byte[] encrypted;

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

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

        using (var ms = new System.IO.MemoryStream())
        {
            using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
            {
                using (var sw = new System.IO.StreamWriter(cs))
                {
                    sw.Write(plainText);
                }

                encrypted = ms.ToArray();
            }
        }
    }

    return Convert.ToBase64String(encrypted);
}
解密
public static string DecryptString(string cipherText, byte[] key, byte[] iv)
{
    byte[] cipherBytes = Convert.FromBase64String(cipherText);

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

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

        using (var ms = new System.IO.MemoryStream(cipherBytes))
        {
            using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
            {
                using (var sr = new System.IO.StreamReader(cs))
                {
                    return sr.ReadToEnd();
                }
            }
        }
    }
}
非对称加密算法

非对称加密算法使用公钥进行加密和私钥进行解密,或者使用私钥进行签名和公钥进行验证。其中最常用的算法是 RSA。下面给出一个使用 RSA 算法进行加密和解密的示例代码。

加密
public static string EncryptString(string plainText, string publicKey)
{
    byte[] encryptedBytes;

    using (var rsa = RSA.Create())
    {
        rsa.FromXmlString(publicKey);

        encryptedBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(plainText), RSAEncryptionPadding.OaepSHA256);
    }

    return Convert.ToBase64String(encryptedBytes);
}
解密
public static string DecryptString(string cipherText, string privateKey)
{
    byte[] cipherBytes = Convert.FromBase64String(cipherText);

    using (var rsa = RSA.Create())
    {
        rsa.FromXmlString(privateKey);

        byte[] decryptedBytes = rsa.Decrypt(cipherBytes, RSAEncryptionPadding.OaepSHA256);

        return Encoding.UTF8.GetString(decryptedBytes);
    }
}
哈希算法

哈希算法将任意长度的数据转换为固定长度的数据。其中最常用的算法是 SHA256。下面给出一个使用 SHA256 算法进行哈希的示例代码。

public static string GetHash(string input)
{
    using (var sha256 = SHA256.Create())
    {
        byte[] bytes = Encoding.UTF8.GetBytes(input);

        byte[] hash = sha256.ComputeHash(bytes);

        return BitConverter.ToString(hash).Replace("-", "").ToLower();
    }
}
总结

加密和解密数据是保护数据不被未经授权的访问的一种方法。在 .NET Core 应用程序中,我们可以使用对称加密算法 AESDES3DES,非对称加密算法 RSADSA,以及哈希算法 MD5SHA1SHA256SHA384SHA512 来进行加密和解密操作。在选择算法时,我们需要考虑加密后的数据大小、加密速度和安全性等因素。