📜  c# encrypted (1)

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

C# Encrypted

在安全敏感的应用程序中,保护和加密数据是至关重要的。C#为开发人员提供了一组强大的加密类和方法,以加密和保护数据。在本文中,我们将探讨如何使用C#对数据进行加密。

加密算法

C#提供了多种加密算法,常用的有AES,DES,RSA,SHA,HMAC等。以下是常用加密算法的简要介绍:

  • AES:高级加密标准,对称加密算法,可用于加密大块的数据,算法安全性高

  • DES:数据加密标准,对称加密算法,适合于加密小块数据,但算法的安全性相对较低

  • RSA:非对称加密算法,可用于加密和数字签名。不同于对称加密算法,它使用两个密钥,公钥和私钥

  • SHA:安全散列算法,用于加密数据和数字签名,其算法可接受输入数据,输出固定长度的哈希值

  • HMAC:密钥哈希算法,对输入的数据通过加密哈希算法得到摘要信息,加密强度可控。

对称加密

对称加密使用同一密钥来加密和解密数据。常见的对称加密算法包括AES和DES。

使用AES

使用C#的AES加密算法非常简单,只需要使用AesCryptoServiceProvider类。我们可以使用以下代码片段示例来进行AES加密:

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

class AES
{
    private static byte[] Key = { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x20, 0x20, 0x20, 0x20 };
    private static byte[] IV = { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76, 0x20, 0x20, 0x20 };

    public static string EncryptString(string plainText)
    {
        byte[] plainBytes = System.Text.Encoding.UTF8.GetBytes(plainText);

        using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
        {
            aes.Key = Key;
            aes.IV = IV;

            using (MemoryStream ms = new MemoryStream())
            using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cs.Write(plainBytes, 0, plainBytes.Length);
                cs.FlushFinalBlock();
                byte[] encryptedBytes = ms.ToArray();

                return Convert.ToBase64String(encryptedBytes);
            }
        }
    }

    public static string DecryptString(string encryptedText)
    {
        byte[] encryptedBytes = Convert.FromBase64String(encryptedText);

        using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
        {
            aes.Key = Key;
            aes.IV = IV;

            using (MemoryStream ms = new MemoryStream())
            using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write))
            {
                cs.Write(encryptedBytes, 0, encryptedBytes.Length);
                cs.FlushFinalBlock();
                byte[] plainBytes = ms.ToArray();

                return System.Text.Encoding.UTF8.GetString(plainBytes);
            }
        }
    }
}

在此代码中,我们使用了AES算法和指定的密钥和初始化向量。在EncryptString函数中,我们将输入文本转换为byte[]类型、使用 AesCryptoServiceProvider类的CreateEncryptor方法来创建一个加密器,并使用CryptoStream类将加密后的数据写入MemoryStream中。最后将加密后的数据使用Base64编码并返回。在DecryptString函数中,我们使用类似的操作来执行解密操作。这是一种使用AES对字符串进行加密和解密的简单方法。

非对称加密

非对称加密使用不同的密钥进行加密和解密操作。最流行的非对称加密算法是RSA。我们可以使用以下代码片段示例来执行RSA加密:

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

class RSA
{
    public static string Encrypt(string plainText, X509Certificate2 cert)
    {
        RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PublicKey.Key;

        byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
        byte[] encryptedBytes = rsa.Encrypt(plainBytes, false);

        return Convert.ToBase64String(encryptedBytes);
    }

    public static string Decrypt(string encryptedText, X509Certificate2 cert)
    {
        RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;

        byte[] encryptedBytes = Convert.FromBase64String(encryptedText);
        byte[] plainBytes = rsa.Decrypt(encryptedBytes, false);

        return Encoding.UTF8.GetString(plainBytes);
    }
}

在此代码中,我们使用非对称加密- RSA算法,使用公钥加密和私钥解密操作。通过使用.NET框架提供的现成的技术,可以轻松地进行加密和解密操作。使用以上代码,我们可以对敏感数据进行安全的传输和存储。

总结

在本文中,我们探讨了C#中常用的加密算法,如AES,DES,RSA,SHA,HMAC等。我们还使用C#提供的现成类和方法,演示了如何使用这些算法来加密和解密数据。良好的加密操作可以有效地防止未经授权的人访问您的数据,因此加密是现代应用程序中不可或缺的一部分。