Heim >Backend-Entwicklung >C++ >Wie kann ich Saiten in C#sicher verschlüsseln und entschlüsseln?

Wie kann ich Saiten in C#sicher verschlüsseln und entschlüsseln?

Patricia Arquette
Patricia ArquetteOriginal
2025-02-02 17:11:09908Durchsuche

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

Sicherheitsverschlüsselung und Zersetzungszeichenfolge in C#

<:> Frage:

Wie kann und zersetzt man die Zeichenfolge in C# sicher, um Daten zu schützen?

Lösung:

c# bietet leistungsstarke Verschlüsselungstools für sicher verschlüsselt und entsperrte Zeichenfolge. Eine Methode besteht darin, erweiterte Verschlüsselungsstandards (AES) und -Objekte zu verwenden. Das Folgende ist ein Beispiel für Code:

Um die Zeichenfolge zu verschlüsseln, verwenden Sie bitte Ihren Klartext und teilen Sie den Schlüssel, um RijndaelManaged aufzurufen. Während der Entschlüsselung muss der gemeinsame Schlüssel übereinstimmen. Um zu entschlüsseln, verwenden Sie bitte verschlüsselte Chiffretexte und gemeinsam genutzte Schlüssel, um

aufzurufen.
<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>

Zusätzliche Beschreibung: EncryptStringAES(plainText, sharedSecret) DecryptStringAES(cipherText, sharedSecret)

Verwenden Sie einen leistungsstarken gemeinsamen Schlüssel, um zu verschlüsseln. Erwägen Sie, Salz zu verwenden, um die Sicherheit zu verbessern.

    Gehen Sie korrekt mit Anomalien und Fehlern um.
  • Für eine sicherere Implementierung untersuchen Sie andere Verschlüsselungsalgorithmen und -methoden. Hinweis: Es gibt Probleme mit der -Funktion im ursprünglichen Code und wird im Beispiel nicht verwendet, sodass sie entfernt wurde. Die richtige IV -Verarbeitungsmethode muss gemäß dem spezifischen AES -Nutzungsmodus angepasst werden. Diese vereinfachte Version beseitigt IV unter der Annahme des Standardmodus von AES. In praktischen Anwendungen müssen Sie den entsprechenden AES -Modus entsprechend den Anforderungen auswählen und die IV ordnungsgemäß behandeln.
  • Diese bearbeitete Antwort verbessert den Code mithilfe von
  • -Antätigkeiten für die ordnungsgemäße Ressourcenverwaltung, das Entfernen des United potenziell Flaget

Das obige ist der detaillierte Inhalt vonWie kann ich Saiten in C#sicher verschlüsseln und entschlüsseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn