回答

收藏

在Postgres中搜索加密字段

技术问答 技术问答 226 人阅读 | 0 人回复 | 2023-09-12

我试着用 pgp_sym_encrypt”在postgres在中间查询一个加密字段。我通过将表中的所有名称设置为加密值来测试:
9 l6 ?" c3 ]( j5 V% ?4 {) o- Aupdate person set first_name = pgp_sym_encrypt('test','password');然后选择:$ o1 q0 D7 f7 \! [. v2 o
select * from person where first_name = pgp_sym_encrypt('test','password');不会回到任何结果。, ?8 u3 J" F3 }" [9 W3 D
如果我把它改为常规使用postgres加密,它将返回表中的所有行:
/ N  u. X1 H& y) V6 t+ x9 nupdate person set first_name = encrypt('test','password','aes');select * from person where first_name = encrypt('test','password','aes');我当前的postgres版本是:postgres(PostgreSQL)9.4.0。在这种情况下,first_name字段是一个bytea字段。
! }5 x6 c# |9 g' ]2 Q1 q$ h谁知道为什么不能用 pgp_sym_encrypt”来工作?* ^, ~! H4 r1 W* H. q0 }
谢谢!3 E% H, s6 n2 H3 f4 }9 D
                                                               
1 X* P# G0 [" k$ K4 T    解决方案:                                                                7 ?' u" r( {% l/ C+ @9 o
                                                                如果查看PostgreSQL文档(附录F.25。pgcrypto-F.25.3。PGP加密函数:5 Q, U" R, P! y2 }0 T
使用给定的密码String2Key(S2K)哈希处理算法。crypt()算法``故意慢而 带有随机盐2 l! N5 f6 c# q, s6 ?7 o
‘’它非常相似,但它会生成全长的二进制密钥。- K; V- m2 }1 v9 K) E$ Q# ]5 Q  F" E
(强调我的。9 `- x- Q! J- y) Q4 a
因此,以下内容在您每次运行时都会给出不同的结果:1 X! n( K' N2 \% p% ~+ W( J0 u
select pgp_sym_encrypt('test','password');使用密码进行测试时pgp_sym_decrypt,可以这样测试:0 E) Z# k( x) @, m) C
select pgp_sym_decrypt(pgp_sym_encrypt('test','password'),'password);
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则