gpt4 book ai didi

mysql - 将 MySQL 密码查询移植到 Postgres

转载 作者:行者123 更新时间:2023-11-29 14:00:44 25 4
gpt4 key购买 nike

我有一部分 MySQL 查询旨在使用 SHA512-CRYPT 保存密码:

SELECT ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))

我需要移植应用程序以使用 PostgreSQL,因此,语句不兼容。我在 PostgreSQL 中的尝试是这样的:

SELECT CRYPT('firstpassword'::text, CONCAT('$6$', SUBSTRING(ENCODE(DIGEST(RANDOM()::text , 'sha1'), 'hex') FROM '.{16}$')))

在组件部分进行测试时,这些实现中的每一个看起来都相同,但作为完整的语句,输出不同。

我发现 CONCAT 语句(生成盐)似乎提供相同的输出。

如果我尝试使用简单的明文单词比较 CRYPTENCRYPT 的输出,输出是相同的。但是,如果我将它与盐的输出结合起来,输出就会不同;

MySQL:

SELECT ENCRYPT( 'firstpassword', '$6$ae73a5ca7d3e5b11' )
Produces: $6$ae73a5ca7d3e5b11$v/RbcEEx4VR37VMUF6gBnPNo2ptSyU...

PostgreSQL:

SELECT CRYPT('firstpassword'::text, '$6$ae73a5ca7d3e5b11'::text)
Produces: $6eTK2KpfoaQM

有人可以解释为什么这些语句会出现分歧,或者建议一个更好的方法来实现这个 MySQL 查询吗?

最佳答案

它们之所以不同是因为它们使用不同的加密算法。

您要做的第一件事是非常熟悉 pg_crypto 文档。参见 http://www.postgresql.org/docs/9.2/static/pgcrypto.html

我怀疑您可能想从加密/加密之类的东西切换到使用 SHA-2 进行实际密码散列,这样您就可以专门控制算法并确保双方的兼容性。

关于mysql - 将 MySQL 密码查询移植到 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19669613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com