Dot Net Core, Cryptography, я получаю разные зашифрованные значения для одной и той же строки каждый раз - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь сохранить и получить идентификатор пользователя / пароль для входа в базу данных из основного приложения Asp.Net. так как это конфиденциальная информация, я попытался зашифровать / расшифровать.

Вот мой класс шифрования / дешифрования.

 public class EncryptorDecryptor
{

    public static string Encrypt(string text, string key)
    {
        var _key = Encoding.UTF8.GetBytes(key);

        using (var aes = Aes.Create())
        {
            using (var encryptor = aes.CreateEncryptor(_key, aes.IV))
            {
                using (var ms = new MemoryStream())
                {
                    using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                    {
                        using (var sw = new StreamWriter(cs))
                        {
                            sw.Write(text);
                        }
                    }

                    var iv = aes.IV;

                    var encrypted = ms.ToArray();

                    var result = new byte[iv.Length + encrypted.Length];

                    Buffer.BlockCopy(iv, 0, result, 0, iv.Length);
                    Buffer.BlockCopy(encrypted, 0, result, iv.Length, encrypted.Length);

                    return Convert.ToBase64String(result);
                }
            }
        }
    }

    public static string Decrypt(string encrypted, string key)
    {
        var b = Convert.FromBase64String(encrypted);

        var iv = new byte[16];
        var cipher = new byte[16];

        Buffer.BlockCopy(b, 0, iv, 0, iv.Length);
        Buffer.BlockCopy(b, iv.Length, cipher, 0, iv.Length);

        var _key = Encoding.UTF8.GetBytes(key);

        using (var aes = Aes.Create())
        {
            using (var decryptor = aes.CreateDecryptor(_key, iv))
            {
                var result = string.Empty;
                using (var ms = new MemoryStream(cipher))
                {
                    using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                    {
                        using (var sr = new StreamReader(cs))
                        {
                            result = sr.ReadToEnd();
                        }
                    }
                }

                return result;
            }
        }
    }
}

Вот мой код для использования класса шифрования / дешифрования

 var name = "santu_ghosh";
            var pword = "p@ssword";
             string key = "E546C8DF278CD5931069B522E695D4F2";
            var encnm = EncryptorDecryptor.Encrypt(name, key);
            var encpwd = EncryptorDecryptor.Encrypt(pword,key);

Моя проблема в том, что я получаю разные значения для encnm (зашифрованное имя) и encpwd (зашифрованный пароль). Таким образом, этот алгоритм непригоден для моей цели.

Мое требование простое. Я хочу алгоритм шифрования (не обязательно AES или тройной DES), который выдает один и тот же вывод каждый раз в ядре Dot net. Так что я смогу сохранить это в appsettings.json, а также извлечь и расшифровать, и каждый раз, когда приложение запускается, я получаю один и тот же результат.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...