Firebird:如何制作md5哈希?

cod*_*ama 4 firebird

我想更新数据库中的所有密码以获得MD5哈希密码.以下不能解决我的问题:

UPDATE USERS SET USERPASS = hash('SALT' || USERPASS);
Run Code Online (Sandbox Code Playgroud)

问题是:它返回一个未使用MD5算法生成的哈希.我如何在Firebird中实现md5哈希算法?

ain*_*ain 6

遗憾的hash,文档中没有提到函数的algortihm ...无论如何,您可以将其实现为UDF或使用实现它的第三方UDF库.在IBPhoenix网站上有一个针对FirebirdUDF库列表,似乎rFunc和FreeAdhocUDF库都有一个(我只检查了这两个,可能还有其他).

  • 在IBPhoenix网站列表中包含`fb_mhash/fb_shash`,它被描述为"实现mhash库(libmhash)的接口".[mhash](http://mhash.sourceforge.net/)支持sha256和sha512,因此它似乎符合要求.IBPhoenix网站上的链接已被破坏,但谷歌发现了这一点:http://nixbit.com/cat/programming/libraries/fb-mhash/ (3认同)

Mar*_*eel 5

Firebird 4.0 添加了加密哈希函数。引用Firebird 4.0 发行说明

CRYPT_HASH()

亚历克斯·佩什科夫

接受的参数可以是 DSQL/PSQL 识别的任何类型的字段、变量或表达式,并返回使用指定算法根据输入参数计算得出的加密哈希值。句法

CRYPT_HASH( <any value> USING <algorithm> )

<algorithm> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Run Code Online (Sandbox Code Playgroud)

例子

select crypt_hash(job_title using sha256) from job;
Run Code Online (Sandbox Code Playgroud)

笔记

  • 此函数返回一个 VARBINARY 字符串,其长度取决于指定的算法。
  • 由于已知的严重问题,不建议使用 MD5 和 SHA1 算法,这些算法仅用于向后兼容。

Firebird 4 可以从https://www.firebirdsql.org/en/firebird-4-0/下载

另请参阅CRYPT_HASHFirebird 4.0 语言参考中的文档。