【问题标题】:Encrypt And Decrypt Hash sha256 in Postgresql在 Postgresql 中加密和解密哈希 sha256
【发布时间】:2021-02-25 15:03:56
【问题描述】:

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

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

这将返回低于哈希值:

\xc7be1ed902fb8dd4d48997c6452f5d7e509fbcdbe2808b16bcf4edce4c07d14e

现在我想使用这个散列值检索我的初始字符串,但在 postgres 文档中找不到任何关于它的内容,任何关于它的帮助都将是可观的。

【问题讨论】:

  • 我只需要知道它的可能性,到目前为止我发现它是不可能的,我想要的是任何可以将文本散列/加密为更小的字符串的双向散列或加密并且也可以转换回相同的文本,在 postgresSQL 中也是如此
  • 如果你只是在寻找压缩 Postgres 在幕后为字符类型做这件事,请参阅TOAST

标签: database postgresql hash sha256


【解决方案1】:

散列加密是有区别的:

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

  • 哈希无法解密,因为信息丢失了;不同的值可能会导致相同的哈希值,尽管希望这些“冲突”不要经常发生

散列是不可逆的,而加密是可逆的。

现在digest is a hashing function:

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

计算给定<em>data</em> 的二进制哈希。

所以你将无法恢复原始字符串。

【讨论】:

    【解决方案2】:

    您可以在 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;

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2013-07-12
      • 1970-01-01
      • 2016-10-29
      • 2019-12-08
      • 2018-03-09
      相关资源
      最近更新 更多