首页 > 解决方案 > 点网核心,密码学,我每次都为同一个字符串得到不同的加密值

问题描述

我正在尝试从 Asp.Net 核心应用程序存储和检索数据库登录的用户 ID/密码。由于这是敏感信息,我尝试过加密/解密。

这是我的加密/解密类。

 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 core 中都提供相同的输出。因此,我将能够将其保存在 appsettings.json 中并检索和解密,并且每次应用程序运行时,我都应该得到相同的结果。

提前致谢。

标签: c#encryptionasp.net-corecryptography

解决方案


推荐阅读