ホームページ > バックエンド開発 > C++ > AESを使用してC#で文字列を暗号化および復号化する方法は?

AESを使用してC#で文字列を暗号化および復号化する方法は?

Linda Hamilton
リリース: 2025-02-02 16:51:10
オリジナル
612 人が閲覧しました

C#およびAESアルゴリズムを使用して、文字列を暗号化して復号化する

この記事では、文字列をC#以下の標準(AES)アルゴリズムで暗号化および復号化する方法を紹介します。 AESは対称的な暗号化アルゴリズムであり、強力なセキュリティを提供し、多くの場合、機密データを保護するために使用されます。

rijndaelmanaged class

.NET Frameworkは、AESアルゴリズムのホスト実装であるクラスを提供します。暗号化と復号化方法を提供します

RijndaelManaged

<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>
ログイン後にコピー
このコードは、

クラスを使用してAES暗号化と復号化を実装する方法を示しています。 セキュリティを強化するために、コードのをカスタムソルト値に置き換える必要があることに注意してください。 この例では、を使用して、共有キーと塩からAESキーを導き出します。 暗号化された結果は、ストレージと送信に便利なBase64文字列の形で返されます。 復号化プロセスが逆になり、base64文字列をバイト配列に変換してから復号化します。 How to Encrypt and Decrypt Strings in C# Using AES?
この関数は、ストリームからIV(初期化ベクトル)を読み取るために使用されます。 潜在的な異常に対処することを忘れないでください。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート