TEXT 列的 SHA1 HASH - 如何在 PostgreSQL 中执行

SHA1 HASH of TEXT column - how to do in PostgreSQL

提问人:NEW2WEB 提问时间:4/3/2023 更新时间:4/3/2023 访问量:335

问:

我需要一个查询,它将对 SHA1 的 TEXT 列进行编码。它不用于密码,而是用作简单的更改状态检查。我在 40chars 处截断,因为它是一个松散的支票。

此查询部分在 MS SQL SERVER 中工作:

RIGHT( CONVERT([varchar](45), HASHBYTES('SHA1', CAST(MY_XML as varchar(max))), 1) ,40) as HASH   

客户需要它才能在 PostgreSQL 中工作。

我已经查看了 和其他函数,但我似乎无法获得正确的语法。ENCODEDIGEST

这些不起作用:

DIGEST(CAST(MY_XML as varchar(max)),'SHA1')::varchar(40) as HASH
CAST(DIGEST(CAST(MY_XML as varchar),'SHA1') as varchar) as HASH
ENCODE(DIGEST(CAST(MY_XML as varchar(max)),'SHA1'),'hex') as HASH
ENCODE(DIGEST(MY_XML::text::bytea, 'sha1'), 'hex') as HASH

(最后一个来源于如何计算文本的真实SHA1?)

我觉得我很接近,但俗话说......

PostgreSQL 哈希 转换 SHA1

评论

0赞 Tangentially Perpendicular 4/3/2023
如果您只是将其用作对更改值的检查,那么它是否为 SHA-1 是否重要?当然,任何一致的哈希计算都可以吗?
0赞 NEW2WEB 4/3/2023
不幸的是,它确实如此,因为这是在远程系统上检查,并且我们的应用程序数据库已经在我们这端使用了 SHA1 验证
0赞 jjanes 4/3/2023
“don't work” 是什么意思?
0赞 Adrian Klaver 4/3/2023
1) 定义不起作用。2)对于您展示的示例,您需要安装扩展。是这样吗?3)这对我有用。pgcryptoselect encode(digest('this is test', 'sha1'), 'hex'); b6794b2000d94d348203d0279c2e7322b922cb16
1赞 Bill Karwin 4/3/2023
我还在我的本地 PostgreSQL 14 实例(MacOS 上的自制软件)上进行了测试,我只需要这样做就可以了。CREATE EXTENSION 'pgcrypto';

答: 暂无答案