ホームページ >バックエンド開発 >C++ >C#で文字列を安全に暗号化および復号化するにはどうすればよいですか?

C#で文字列を安全に暗号化および復号化するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-02-02 17:11:09957ブラウズ

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

C#

の安全暗号化と分解文字列 質問:

データを保護するために文字列をC#で安全に暗号化および分解する方法は?

解決策:

C#は、文字列を安全に暗号化およびロック解除するための強力な暗号化ツールを提供します。 1つの方法は、高度な暗号化標準(AES)およびオブジェクトを使用することです。以下はコードの例です

文字列を暗号化するには、プレーンテキストを使用してキーを共有して

を呼び出してください。復号化中、共有キーは一致する必要があります。復号化するには、暗号化された暗号文と共有キーを使用して、RijndaelManagedを呼び出します。

<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>
追加の説明:

EncryptStringAES(plainText, sharedSecret) DecryptStringAES(cipherText, sharedSecret)

強力な共有キーを使用して暗号化します。

塩を使用して安全性を高めることを検討してください。

異常とエラーを正しく処理します。
  • より安全な実装については、他の暗号化アルゴリズムとメソッドを調べてください。 注:元のコードには関数に問題があり、実際には例では使用されていないため、削除されています。 正しいIV処理方法は、特定のAES使用モードに従って調整する必要があります。 この簡素化されたバージョンは、AEのデフォルトモードを想定してIVを削除します。 実際のアプリケーションでは、ニーズに応じて適切なAESモードを選択し、IVを適切に処理する必要があります。
  • この改訂された回答は、適切なリソース管理のために
  • ステートメントを使用し、潜在的に旗を削除し、Real-Workdシナリオでの処分の重要性を明確にし、デフォルトの処理を実現しますAESモードは、Exmpleの目的で十分です

以上がC#で文字列を安全に暗号化および復号化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。