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

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

Barbara Streisand
Barbara Streisandoriginal
2025-02-02 17:01:09309parcourir

En C #, utilisez le chiffrement de l'algorithme Rijndaelmanaged et l'explication détaillée de la chaîne impure

How to Encrypt and Decrypt Strings in C# Using RijndaelManaged?

Cet article introduira en détail comment utiliser l'algorithme Rijndaelmanaged en C # pour crypter et décrypter la chaîne.

Le processus de chiffrement

Tout d'abord, vous devez introduire un espace de dénomination

. Le fragment de code suivant montre comment utiliser l'algorithme Rijndaelmanaged plus une chaîne compliquée:

System.Security.Cryptography

Le processus de décryptage
<code class="language-csharp">using System.Security.Cryptography;

public class Encryption
{
    // 使用RijndaelManaged算法加密字符串
    public string EncryptString(string plainText, string sharedSecret)
    {
        // 从共享密钥和salt生成密钥
        Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);

        // 创建RijndaelManaged对象
        RijndaelManaged aesAlg = new RijndaelManaged();
        aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);

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

        // 创建内存流来保存加密数据
        using (MemoryStream msEncrypt = new MemoryStream())
        {
            // 将IV写入流
            msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int));
            msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length);

            // 加密数据
            using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                {
                    swEncrypt.Write(plainText);
                }
            }

            // 将加密数据转换为base64字符串
            return Convert.ToBase64String(msEncrypt.ToArray());
        }
    }
}</code>

La chaîne de décryptage et de chiffrement doit utiliser la même clé partagée que lorsqu'elle est chiffrée. Le fragment de code suivant montre comment utiliser la même chaîne d'algorithme Rijndaelmanaged:

Veuillez noter que il doit être défini comme un tableau d'octets dans le code pour une sécurité améliorée. Le code complet doit également contenir l'implémentation de la méthode

. Cette méthode Lire le tableau d'octets de
<code class="language-csharp">public string DecryptString(string cipherText, string sharedSecret)
{
    // 从共享密钥和salt生成密钥
    Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);

    // 创建RijndaelManaged对象
    RijndaelManaged aesAlg = new RijndaelManaged();
    aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);

    // 将密文从base64字符串转换
    byte[] bytes = Convert.FromBase64String(cipherText);

    // 创建内存流来保存解密数据
    using (MemoryStream msDecrypt = new MemoryStream(bytes))
    {
        // 从流中获取IV
        aesAlg.IV = ReadByteArray(msDecrypt);

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

        // 解密数据
        using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
        {
            using (StreamReader srDecrypt = new StreamReader(csDecrypt))
            {
                // 从流中读取解密数据
                return srDecrypt.ReadToEnd();
            }
        }
    }
}</code>
. N'oubliez pas que le choix d'une clé de partage solide est essentiel pour la sécurité.

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!

Déclaration:
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