C# 从数据库解密加密的值

C# 从数据库解密加密的值,c#,encryption,C#,Encryption,我想在数据库中保存一个加密的值,当从数据库中获取该值时,我想解密并在UI中显示该值。这是我使用的代码 private string Decryptdata(string encryptpwd) { string decryptpwd = string.Empty; UTF8Encoding encodepwd = new UTF8Encoding(); Decoder Decode = encodepwd.GetDecoder(); encryptpwd = en

我想在数据库中保存一个加密的值,当从数据库中获取该值时,我想解密并在UI中显示该值。这是我使用的代码

private string Decryptdata(string encryptpwd)
{
    string decryptpwd = string.Empty;
    UTF8Encoding encodepwd = new UTF8Encoding();
    Decoder Decode = encodepwd.GetDecoder();
    encryptpwd = encryptpwd.Replace(" ", "+");
    byte[] todecode_byte = Convert.FromBase64String(encryptpwd);
    int charCount = Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
    char[] decoded_char = new char[charCount];
    Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
    decryptpwd = new String(decoded_char);
    return decryptpwd;
}
但是我得到的错误是Base-64字符数组的长度无效。我使用的是c#net

加密功能:

Encryptdata(string password) { 
       string strmsg = string.Empty; 
       byte[] encode = new byte[password.Length]; 
       encode = Encoding.UTF8.GetBytes(password); 
       strmsg = Convert.ToBase64String(encode); 
       return strmsg; 
}

如果您将密码存储在数据库中,除非您有充分的理由需要获取纯文本,否则您应该对密码进行哈希处理,而不是将其加密或以纯文本形式存储

加密和散列的区别在于,加密可以从散列无法检索的位置检索纯文本。当您存储密码时,您应该获取用户提供的密码并对其进行散列(理想情况下使用salt),然后当用户下次尝试使用密码登录时,您再次对其进行散列,然后将存储的散列与您刚才生成的散列进行比较,如果它们匹配,则它们是相同的

我在这里()对此进行了更全面的解释

我在我的网站上有一些带有代码的散列函数(在VB.NET中,但它们很容易移动到C#),可能最好使用SHA512()


如果您对散列等仍不确定,请随意说出您不理解的内容,我会尽力帮助您:)

如果您将密码存储在数据库中,除非您有很好的理由需要获取纯文本,否则您应该对密码进行散列,而不是以加密或纯文本形式存储密码

加密和散列的区别在于,加密可以从散列无法检索的位置检索纯文本。当您存储密码时,您应该获取用户提供的密码并对其进行散列(理想情况下使用salt),然后当用户下次尝试使用密码登录时,您再次对其进行散列,然后将存储的散列与您刚才生成的散列进行比较,如果它们匹配,则它们是相同的

我在这里()对此进行了更全面的解释

我在我的网站上有一些带有代码的散列函数(在VB.NET中,但它们很容易移动到C#),可能最好使用SHA512()


如果您仍然不确定哈希等。请随意说出您不理解的内容,我会尽力帮助您:)

您是否也可以发布加密函数pleaseprivate string Encryptdata(字符串密码){string strmsg=string.Empty;byte[]encode=new byte[password.Length];encode=Encoding.UTF8.GetBytes(密码);strmsg=Convert.ToBase64String(encode);返回strmsg;}如果我紧跟这两个函数使用,它就可以正常工作。所以其他地方出了点问题。这只是为了检查密码吗?处理这件事不是很安全。您应该将密码加密到数据库中,然后当用户登录时,获取键入的密码,对其进行加密,然后检查数据库中的加密值
string password=tbPassWord.Text;字符串加密=加密数据(密码);如果(encrypted!=databasevalue){//invalid username或pass}
我想以加密的形式将值保存到数据库中。它不是密码。我想以解密的形式从数据库中获取值。这不是加密,而是编码。这甚至不是远程安全的…您是否也可以发布加密函数pleaseprivate string Encryptdata(字符串密码){string strmsg=string.Empty;byte[]encode=new byte[password.Length];encode=Encoding.UTF8.GetBytes(password);strmsg=Convert.ToBase64String(encode);return strmsg;}如果我将这两个函数紧跟在一起使用,则效果很好。所以其他地方出了点问题。这只是为了检查密码吗?处理这件事不是很安全。您应该将密码加密到数据库中,然后当用户登录时,获取键入的密码,对其进行加密,然后检查数据库中的加密值
string password=tbPassWord.Text;字符串加密=加密数据(密码);如果(encrypted!=databasevalue){//invalid username或pass}
我想以加密的形式将值保存到数据库中。它不是密码。我想以解密的形式从数据库中获取值。这不是加密,而是编码。这甚至一点都不安全。。。