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函数的经验。