Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menyulitkan dan menyahsulit tali dalam C# menggunakan AES?

Bagaimana untuk menyulitkan dan menyahsulit tali dalam C# menggunakan AES?

Linda Hamilton
Linda Hamiltonasal
2025-02-02 16:51:10657semak imbas

Gunakan algoritma C#dan AES untuk menyulitkan dan menyahsulit rentetan

Artikel ini memperkenalkan cara menyulitkan dan menyahsulit rentetan dengan algoritma Standard Penyulitan C#dan Tinggi (AES). AES adalah algoritma penyulitan simetri yang menyediakan keselamatan yang kuat dan sering digunakan untuk melindungi data sensitif.

kelas rijndaelmanaged

Rangka Kerja NET. Ia menyediakan kaedah penyulitan dan penyahsulitan.

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>
Kod ini menunjukkan cara menggunakan kelas

untuk melaksanakan penyulitan dan penyahsulitan AES. Sila ambil perhatian bahawa dalam kod perlu diganti dengan nilai garam tersuai untuk meningkatkan keselamatan. Contoh ini menggunakan untuk memperoleh kunci AES dari kunci dan garam yang dikongsi. Keputusan yang disulitkan dikembalikan dalam bentuk rentetan Base64, yang mudah untuk penyimpanan dan penghantaran. Proses penyahsulitan dibalikkan, menukar rentetan Base64 ke dalam array byte, dan kemudian menyahsulit. How to Encrypt and Decrypt Strings in C# Using AES?
Fungsi ini digunakan untuk membaca IV (vektor inisialisasi) dari aliran. Ingatlah untuk menangani potensi keabnormalan.

Atas ialah kandungan terperinci Bagaimana untuk menyulitkan dan menyahsulit tali dalam C# menggunakan AES?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn