Postgres 11.4 Postgres中的加密扩展问题



我正在使用pgcrypto扩展在我的PostgreSQL数据库中进行密码加密。 我使用相同的密钥来加密所有密码。当我在不同的密码(不同的字符串(中使用相同的密钥时,它会给出相同的输出。

样品:

db=# select crypt('Sharon_1','alpha');
crypt     
---------------
aljp4LCkDT1k.
(1 row)
Time: 2.025 ms
db=# select crypt('Sharon_1trgstysa','alpha');
crypt     
---------------
aljp4LCkDT1k.
(1 row)

为什么会这样?。当我传递两个不同的字符串时,它应该给出不同的加密字符串作为输出。这是一个错误吗?我该如何解决这个问题?我无法更改密钥。密钥应始终相同。

邮政版本:

db=# select version();
PostgreSQL 11.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28),
64-bit

扩展版本:

db=# dx pgcrypto
List of installed extensions
Name   | Version | Schema |       Description       
----------+---------+--------+-------------------------
pgcrypto | 1.3     | public    | cryptographic functions
pgcrypt

用于其他内容:

计算密码(3(式的密码哈希。存储新的 密码,您需要使用 gen_salt(( 生成一个新的 salt 值。自 检查密码,将存储的哈希值作为 salt 传递,并测试是否 结果与存储的值匹配。

以下CTE使用md5盐算法加密密码,选择将给定的密码与 CTE 中的密码进行比较:

WITH j (val) AS (
VALUES 
(crypt('Sharon_1',gen_salt('md5'))),
(crypt('Sharon_1trgstysa',gen_salt('md5')))
) 
SELECT 
val = crypt('Sharon_1',val), -- entered password to compare!
val -- stored password
FROM j;
?column? |                val                 
----------+------------------------------------
t        | $1$XpqL58HA$k2G55BjtVFQxHVe/jpu.2.
f        | $1$0OIuDMkZ$PH2cDjG.aRzUAvtUtvf3E1
(2 Zeilen)

要使用对称PGP密钥进行加密和解密,请尝试pgp_sym_encryptpgp_sym_decrypt,例如

WITH j (val) AS (
VALUES 
(pgp_sym_encrypt('Sharon_1','alpha')),
(pgp_sym_encrypt('Sharon_1trgstysa','alpha'))     
) 
SELECT pgp_sym_decrypt(val,'alpha') FROM j;

pgp_sym_decrypt  
------------------
Sharon_1
Sharon_1trgstysa
(2 Zeilen)

crypt 使用的算法嵌入在 salt 的格式中。 您的盐"alpha"没有指定算法,因此crypt使用desdes只查看密码的前 8 个字符(以及盐的前 2 个字符(,并且您的两个密码在前 8 个字符中没有区别。

我无法更改密钥。

然后你的系统在设计上被破坏了。

相关内容

  • 没有找到相关文章

最新更新