SQLite中的SHA1哈希:怎么样?

并行使用多个DB,需要使用散列密码初始化一些记录。 在MS SQL server有一些方便的函数可以动态散列:

 HashBytes('SHA1', CONVERT(nvarchar(32), N'admin')) 

SQLite是否有类似的function?

如果没有,这是最简单的解决方法(例如从SQL server选择并以某种方式将其插入到SQLite表中)?

首选的散列算法是SHA1 ,密码存储在BLOB列中。

更新:我在当前项目中使用C#语言。

SQLite3中没有内置这样的function。

但是你可以定义一个用户函数,例如使用sqlite3_create_function如果你正在使用C接口,并用它实现SHA-1。 (但是如果你有一个可编程接口,也许你可以在SQL引擎之外使用SHA-1密码。)

您还可以尝试查找/创建扩展并使用load_extension函数加载,但我没有相关经验。

编辑:

  • 有关如何使用C#中的System.Data.SQLite定义自定义函数,请参阅SQLiteFunction上的答案 。
  • 使用System.Security.Cryptography.SHA1计算SHA-1哈希。

SQLite没有附带SHA1,但它相对容易添加。 您没有说出您正在使用的语言,但您可以查看create_function和sqlite3_result的C文档。 您还可以看一下如何使用Ruby将SHA1添加到SQLite的示例 。

使用System.Data.SQLite ,它们被称为用户定义的函数。 您可以在主站点上查看此示例 。

您可以在C#中为SHA1创建自定义函数,如下所示:

 [SQLiteFunction(Name = "Sha1", Arguments = 1, FuncType = FunctionType.Scalar)] public class Sha1 : SQLiteFunction { public override object Invoke(object[] args) { var buffer = args[0] as byte[]; if ( buffer == null ) { var s = args[0] as string; if ( s != null ) buffer = Encoding.Unicode.GetBytes(s); } if ( buffer == null ) return null; using ( var sha1 = SHA1.Create() ) { return sha1.ComputeHash(buffer); } } } 

可以为二进制数据或字符串调用此函数。 字符串以Unicode表示forms进行哈希处理。 这应该与SQL Server匹配。

该函数可以像这样调用:

 select sha1('abc') select sha1(x'010203') 

据我所知,SQLite没有内置的散列函数。

有一种方法可以向SQLite添加自定义函数,但如果您只是计算程序中的SHA1哈希并将其存储在SQlite中,则可能更容易。

为SQLite创建自定义函数在某种程度上取决于API和您正在使用的语言。 我只有从Python创建SQLite函数的经验。