postgresql - Postgres 中的 Postgres 11.4 crypt 扩展问题
问题描述
我在我的 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)
为什么会这样?。当我传递两个不同的字符串时,它应该给出不同的加密字符串作为输出。这是一个错误吗?我该如何解决这个问题?我无法更改密钥。密钥应该始终相同。
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
用于其他用途:
计算密码的 crypt(3) 样式哈希。存储新密码时,需要使用 gen_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_encrypt
and pgp_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)
推荐阅读
- reactjs - 停止观看 reactjs 中的文件夹更改
- javascript - 类型 [未定义,未定义] | [number, number] 不可分配给类型 [number, number]
- python - (discord.py)我想为一个不和谐的服务器做一个点名机器人
- mysql - 根据平均收视率对在印度上映的电影的演员进行排名。哪个演员位居榜首?
- react-native - 行上的事件按本机反应
- ns-3 - 使用 NS3 实现 M/M/1 队列
- android - 在 Android 手机上使用 adb bridge 从 Linux 终端发送短信
- dart - 如何在 Dart 中找到集合的所有子集?
- python - 如何在我的模型中添加 tf.keras.layers.AdditiveAttention?
- python - Python:如何检查时间是否超过指定时间?