C# SQLite 加密哈希 SHA1

C# SQLite encryption hashing SHA1

我有一个 C# 应用程序和一个 SQLite 数据库。在数据库中,我有一个包含几列的 table。在其中一列中,我有一个从查询中用 SHA1 加密的值。但是我需要像这样在我的 C# 应用程序中使用它:

cmd.CommandText = "Select * from accounts where (username=@username and password=sha1(@password));";

我需要 select 字符串值,以便登录到应用程序。我收到错误:no such function sha1.

从其他帖子,如:This one,我知道我必须创建另一个函数来使用 sha1 进行散列?但我真的不明白该怎么做..任何人都可以帮助我吗?很抱歉,如果它是重复的,但我没有找到指定的答案。

由于 SQLite 默认不实现任何 sha1 功能,您必须从 SQL 移动密码散列查询您的代码。

意味着您的查询应该是:

cmd.CommandText = "Select * from accounts where (username=@username and password=@password);";

你应该像这样传递密码:

cmd.Parameters.AddWithValue("@password", sha1(password));

并且您应该实现自己的 sha1 函数

using System.Security.Cryptography;

...

string sha1(string input) {
    byte[] byteArray = Encoding.UTF8.GetBytes(input);
    string result="";
    using (HashAlgorithm hash = SHA1.Create()) {
        result=Convert.ToBase64String(hash.ComputeHash(byteArray));
    }
    return result;
}

重要

使用散列函数存储密码被认为不安全,您应该考虑了解 Key Derivation function,阅读维基百科页面将引导您使用 C# 实现此类功能.