Maison > développement back-end > C++ > Comment puis-je crypter et déchiffrer solidement des cordes en C #?

Comment puis-je crypter et déchiffrer solidement des cordes en C #?

Patricia Arquette
Libérer: 2025-02-02 17:11:09
original
906 Les gens l'ont consulté

How Can I Securely Encrypt and Decrypt Strings in C#?

Cryptage de sécurité et chaîne de décomposition en C #

Question:

Comment crypter et décomposer en toute sécurité la chaîne en C # pour protéger les données?

Solution:

C # propose de puissants outils de chiffrement pour une chaîne solidement cryptée et déverrouillée. Une méthode consiste à utiliser des objets de chiffrement avancés (AES) et . Ce qui suit est un exemple de code:

Pour crypter la chaîne, veuillez utiliser votre texte en clair et partager la clé pour appeler RijndaelManaged. Pendant le décryptage, la clé partagée doit correspondre. Pour décrypter, veuillez utiliser des texrages chiffrés et des clés partagées pour appeler

.
<code class="language-csharp">public class Crypto
{
    // 用于密钥生成的盐
    private static byte[] _salt = { /* 在此处添加您的应用程序专用盐 */ };

    // 使用 AES 加密字符串
    public static string EncryptStringAES(string plainText, string sharedSecret)
    {
        // 密钥生成
        Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);

        // 初始化 RijndaelManaged 对象
        RijndaelManaged aesAlg = new RijndaelManaged();
        aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);

        // 创建加密器和流
        ICryptoTransform encryptor = aesAlg.CreateEncryptor();
        using (MemoryStream msEncrypt = new MemoryStream())
        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
        {
            // 加密并写入流
            swEncrypt.Write(plainText);
        }

        // 转换为 Base64 字符串
        return Convert.ToBase64String(msEncrypt.ToArray());
    }

    // 使用 AES 解密加密的字符串
    public static string DecryptStringAES(string cipherText, string sharedSecret)
    {
        // 密钥生成
        Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);

        // 从 Base64 字符串转换
        byte[] bytes = Convert.FromBase64String(cipherText);
        using (MemoryStream msDecrypt = new MemoryStream(bytes))
        {
            // 初始化 RijndaelManaged 对象
            RijndaelManaged aesAlg = new RijndaelManaged();
            aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
            //aesAlg.IV = ReadByteArray(msDecrypt);  //移除IV读取,因为示例代码中IV处理有误

            // 创建解密器和流
            ICryptoTransform decryptor = aesAlg.CreateDecryptor();
            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
            using (StreamReader srDecrypt = new StreamReader(csDecrypt))
            {
                // 解密并从流中读取
                return srDecrypt.ReadToEnd();
            }
        }
    }

    // 从流中读取字节数组的辅助方法 (此方法在示例中未被使用,且有潜在错误,故移除)
    //private static byte[] ReadByteArray(Stream s) { ... }
}</code>
Copier après la connexion

Description supplémentaire: EncryptStringAES(plainText, sharedSecret) DecryptStringAES(cipherText, sharedSecret)

Utilisez une clé partagée puissante pour crypter. Envisagez d'utiliser du sel pour améliorer la sécurité.

    gérer correctement les anomalies et les erreurs.
  • Pour une implémentation plus sécurisée, explorez d'autres algorithmes et méthodes de chiffrement. Remarque: il y a des problèmes avec la fonction dans le code d'origine, et il n'est pas réellement utilisé dans l'exemple, il a donc été supprimé. La méthode de traitement IV correcte doit être ajustée en fonction du mode d'utilisation AES spécifique. Cette version simplifiée supprime IV, en supposant le mode par défaut des AES. Dans les applications pratiques, vous devez choisir le mode AES approprié en fonction des besoins et gérer correctement l'IV.
  • Cette réponse révolue améliore le code en utilisant
  • des instructions pour une gestion appropriée des ressources, en supprimant les United Potential Flaget

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