Alex2 101 Ответов: 1

Как зашифровать и расшифровать строку с помощью алгоритма AES в ASP.NET с C#?


Я хочу зашифровать и расшифровать строку с помощью алгоритма AES в asp.net с помощью c#. Я хочу зашифровать строку с помощью ключа, который может быть случайно сгенерирован и расшифрован, и получить строку, зашифрованную в алгоритме AES. Я пробовал шифрование и дешифрование в AES, но расшифрованное значение не совпадает со строкой, которую я зашифровал.Кроме того, мне нужно сгенерировать ключ шифрования случайным образом. В настоящее время я покончил с ключом, полученным статически.

Что я уже пробовал:

Выполненный код выглядит следующим образом:
Encryption Method
public static string AES_Encrypt(string clearText, ref string keyStr)
        {
            string EncryptionKey = "MAKV2SPBNI99212";
            byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });

                byte[] key=new byte[16];
                key= pdb.GetBytes(16);
                encryptor.Key =key;
                encryptor.IV = key;

                keyStr = System.Text.Encoding.UTF8.GetString(key);
      

                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(clearBytes, 0, clearBytes.Length);
                        cs.Close();
                    }
                    clearText = Convert.ToBase64String(ms.ToArray());
                }
            }
            return clearText;
        }

       Decryption Method
        public static string AES_Decrypt(string cipherText, Aes encryptor)
        {

            //string EncryptionKey = "MAKV2SPBNI99212";
            byte[] cipherBytes = Convert.FromBase64String(cipherText);
            //using (Aes encryptor = Aes.Create())
            //{
            //Rfc2898DeriveBytes pdb = new
            //    Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
            //encryptor.Key = pdb.GetBytes(16);
            //encryptor.IV = pdb.GetBytes(16);
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(cipherBytes, 0, cipherBytes.Length);
                    cs.Close();
                }
                cipherText = Encoding.Unicode.GetString(ms.ToArray());
            }
            // }
            return cipherText;
        }

F-ES Sitecore

Я уверен, что если вы загуглите "c# aes encrypt decrypt", то найдете множество рабочих примеров. Если вы хотите, чтобы ключ был случайным, вам понадобится какой-то способ убедиться, что тот, кто расшифровывает текст, знает, что это за случайный ключ. Выбранный вами механизм может легко сделать ваш код небезопасным.

CPallini

Мой виртуальный 5.

1 Ответов

Рейтинг:
2

RickZeeland

Вот хорошая статья CodeProject об этом: Шикарное шифрование/дешифрование на языке Си#[^]
Цитата:
Из-за хорошей производительности и потому, что AES является "новым" стандартом FIPS от 26 ноября 2001 года, вы, вероятно, всегда должны идти на AES_256_CBC. Это обеспечит хорошую безопасность и производительность.