postgres 中的 Postgres 11.4 crypt 扩展问题

Postgres 11.4 crypt extension issue in postgres

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

样本:

db=# select crypt('Sharon_1','alpha');
     crypt     
---------------
 aljp4LCkDT1k.
(1 row)

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

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

Postgres 版本:

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 用于其他用途:

Calculates a crypt(3)-style hash of password. When storing a new password, you need to use gen_salt() to generate a new salt value. To check a password, pass the stored hash value as salt, and test whether the result matches the stored value.

以下 CTE 使用 md5 salt 算法加密密码,select 将给定密码与 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        | $XpqL58HA$k2G55BjtVFQxHVe/jpu.2.
 f        | [=10=]OIuDMkZ$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 个字符(以及 salt 的前 2 个字符),并且您的两个密码的前 8 个字符没有区别。

i can't change the key.

那么你的系统被设计坏了。