Maison > développement back-end > C++ > Comment crypter et déchiffrer les chaînes en C # en utilisant des AES?

Comment crypter et déchiffrer les chaînes en C # en utilisant des AES?

Linda Hamilton
Libérer: 2025-02-02 16:51:10
original
612 Les gens l'ont consulté

Utilisez des algorithmes C # et AES pour crypter et déchiffrer la chaîne

Cet article présente comment crypter et déchiffrer la chaîne avec l'algorithme C # et supérieur de norme de chiffrement (AES). AES est un algorithme de chiffrement symétrique qui offre une sécurité solide et est souvent utilisé pour protéger les données sensibles.

Classe Rijndaelmanaged

.NET Framework fournit une classe RijndaelManaged, qui est l'implémentation de l'hôte d'un algorithme AES. Il fournit des méthodes de cryptage et de décryptage.

<code class="language-csharp">using System.Security.Cryptography;

public class EncryptionManager
{
    private static byte[] _salt = /* 请在此处插入自定义salt */;

    public static string EncryptStringAES(string plainText, string sharedSecret)
    {
        if (string.IsNullOrEmpty(plainText) || string.IsNullOrEmpty(sharedSecret))
            throw new ArgumentNullException();

        using (var aesAlg = new RijndaelManaged())
        {
            // 使用共享密钥和salt生成密钥
            using (var key = new Rfc2898DeriveBytes(sharedSecret, _salt))
            {
                aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
            }

            // 创建加密器
            var encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

            // 加密文本
            using (var msEncrypt = new MemoryStream())
            {
                using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (var swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(plainText);
                    }
                }

                // 将加密后的字节转换为base64字符串
                return Convert.ToBase64String(msEncrypt.ToArray());
            }
        }
    }

    public static string DecryptStringAES(string cipherText, string sharedSecret)
    {
        if (string.IsNullOrEmpty(cipherText) || string.IsNullOrEmpty(sharedSecret))
            throw new ArgumentNullException();

        using (var aesAlg = new RijndaelManaged())
        {
            // 使用共享密钥和salt生成密钥
            using (var key = new Rfc2898DeriveBytes(sharedSecret, _salt))
            {
                aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
            }

            var cipherBytes = Convert.FromBase64String(cipherText);
            using (var msDecrypt = new MemoryStream(cipherBytes))
            {
                aesAlg.IV = ReadByteArray(msDecrypt);

                // 创建解密器
                var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

                // 解密文本
                using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (var srDecrypt = new StreamReader(csDecrypt))
                    {
                        return srDecrypt.ReadToEnd();
                    }
                }
            }
        }
    }

    private static byte[] ReadByteArray(Stream s)
    {
        byte[] rawLength = new byte[sizeof(int)];
        s.Read(rawLength, 0, rawLength.Length);

        byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)];
        s.Read(buffer, 0, buffer.Length);

        return buffer;
    }
}</code>
Copier après la connexion

How to Encrypt and Decrypt Strings in C# Using AES?
Ce code montre comment utiliser la classe

pour implémenter le cryptage et le décryptage AES. Veuillez noter que dans le code doit être remplacé par une valeur de sel personnalisée pour améliorer la sécurité. Cet exemple utilise pour dériver la clé AES de la clé partagée et du sel. Les résultats cryptés sont retournés sous la forme de la chaîne Base64, ce qui est pratique pour le stockage et la transmission. Le processus de décryptage est inversé, convertissant la chaîne Base64 en tableau d'octets, puis décrivrant.

La fonction est utilisée pour lire IV (vecteur d'initialisation) du flux. N'oubliez pas de faire face à des anomalies potentielles. RijndaelManaged

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal