Postgresql中的哈希sha256加密和解密



我正在尝试使用sha256在postgresql中散列一个字符串,如下所示:

select digest('This is a test','sha256');

这将返回以下散列值:

xc7be1ed902fb8dd4d48997c6452f5d7e509fbcdbe2808b16bcf4edce4c07d14e

现在我想使用这个散列值检索我的初始字符串,但在postgres文档中找不到任何关于它的信息,任何关于它方面的帮助都是值得的。

哈希加密之间存在差异:

  • 可以对加密值进行解密以取回原始值,因此加密是无损失的,两个不同的明文值总是会导致不同的加密值

  • 散列无法解密,因为信息丢失;不同的值可以导致相同的散列;碰撞";不会经常发生

哈希是不可逆的,而加密是可逆的。

现在digest是一个散列函数:

digest(data text, type text) returns bytea
digest(data bytea, type text) returns bytea

计算给定data的二进制哈希。

因此您将无法恢复原始字符串。

您可以在Postgresql中使用pgcrypto扩展来保存加密后的数据。

对于插入,

INSERT INTO tablename (columnname1, columnname2) VALUES (PGP_SYM_ENCRYPT('value1', 'aes_key'), PGP_SYM_ENCRYPT('value2', 'aes_key'));

对于提取,

SELECT PGP_SYM_DECRYPT(columnname1::bytea, 'aes_key') as columnname1, PGP_SYM_DECRYPT(columnname2::bytea, 'aes_key') as columnname2 from tablename;

最新更新