PostgreSQL 使用 SHA256 和预定义的盐对列进行哈希处理

问题描述

我正在使用:Postgresql 11.6 on x86_64-pc-linux-gnu,由 gcc (GCC) 4.9.3 编译,64 位在 AWS 上作为 aurora (RDS) 运行。

我已经设法让以下工作

SELECT encode(digest('email@example.com','sha256'),'hex');

但我需要使用第三方提供的盐。假设为了争论,盐是“this_is_my_salt”。我怎样才能使用它?我只能找到使用算法生成盐的例子。

供应商希望我们使用他们的哈希将他们数据库中的电子邮件地址与我们的进行比较。他们没有指定他们的数据库系统,但向我展示了他们的查询

SELECT 'email@example.com' as unhashed_email,sha2('shared_salt_value' || lower('email@example.com')) as hashed_email

这会对我使用以下答案之一在 postgres 中尝试示例产生不同的哈希值:

SELECT encode(digest('email@example.com' || 'shared_salt_value','hex');

我的哈希以 db17e 开头.... 他们的哈希以 b6c84 开头....

会不会是编码或其他原因造成的差异?

解决方法

这很简单,只需将字符串与盐连接即可:

SELECT encode(digest('this_is_my_salt' || 'email@example.com','sha256'),'hex');