postgres 存储哈希字符串:无效的消息格式
postgres store hash string: invalid message format
在我的 node.js 应用程序中,我应该能够创建一些新用户。
为了以安全的方式存储密码,我使用 sodium-native 库生成 argon2 哈希 (https://github.com/sodium-friends/sodium-native)。现在我尝试将这些哈希值的字符串表示形式存储在我的 postgres 数据库中。
JavaScript 查询字符串如下所示:
INSERT INTO users (email, name, password) VALUES ('${email}', '${name}', '${pwHash}')
生成的 sql 语句如下所示:
INSERT INTO users (email, name, password)
VALUES ('test@test.org', 'test', '$argon2id$v=19$m=8,t=1,p=1$WAw+HmO/+RZTazVr3eOnPg$HYzaB0+Cre23XGR+A1cZawrUvkon2Cx3x7ua5I68xGo ')
除了散列之外,还存储了一些关于它的更多信息以帮助验证密码。
我不知道为什么它会产生所有这些空白,但我认为这是由于使用的缓冲区长度固定所致。
我的问题是 postgres 出于某种原因向我发送了一个错误:invalid message format, code: '08P01'
现在,该代码表示 protocol violation
,不管它是什么意思。
有趣的是:当我硬编码出现在我的浏览器或控制台中的散列时,它就起作用了:
INSERT INTO users (email, name, password)
VALUES ('${email}', '${name}', '$argon2id$v=19$m=8,t=1,p=1$WAw+HmO/+RZTazVr3eOnPg$HYzaB0+Cre23XGR+A1cZawrUvkon2Cx3x7ua5I68xGo ')
如果我删除或不删除空格,它似乎没有什么区别。
谁能告诉我我做错了什么?
编辑:有人问我那些 "blanks" 是否真的是空格。至少我是这么认为的,因为它们在编辑器和浏览器中以一个的形式出现,并且也以一个的形式复制。我试图手动删除它们,但没有任何区别。
我也尝试使用字符串连接而不是插值,但它也没有任何区别。
我现在不是先将缓冲区转换为字符串,而是将散列存储为原始二进制数据 (data-type bytea),因为它是由 sodium-native 生成的。这也使密码验证变得微不足道。请务必遵循 mu is too short 关于 SQL 注入的建议。
在我的 node.js 应用程序中,我应该能够创建一些新用户。 为了以安全的方式存储密码,我使用 sodium-native 库生成 argon2 哈希 (https://github.com/sodium-friends/sodium-native)。现在我尝试将这些哈希值的字符串表示形式存储在我的 postgres 数据库中。
JavaScript 查询字符串如下所示:
INSERT INTO users (email, name, password) VALUES ('${email}', '${name}', '${pwHash}')
生成的 sql 语句如下所示:
INSERT INTO users (email, name, password)
VALUES ('test@test.org', 'test', '$argon2id$v=19$m=8,t=1,p=1$WAw+HmO/+RZTazVr3eOnPg$HYzaB0+Cre23XGR+A1cZawrUvkon2Cx3x7ua5I68xGo ')
除了散列之外,还存储了一些关于它的更多信息以帮助验证密码。 我不知道为什么它会产生所有这些空白,但我认为这是由于使用的缓冲区长度固定所致。
我的问题是 postgres 出于某种原因向我发送了一个错误:invalid message format, code: '08P01'
现在,该代码表示 protocol violation
,不管它是什么意思。
有趣的是:当我硬编码出现在我的浏览器或控制台中的散列时,它就起作用了:
INSERT INTO users (email, name, password)
VALUES ('${email}', '${name}', '$argon2id$v=19$m=8,t=1,p=1$WAw+HmO/+RZTazVr3eOnPg$HYzaB0+Cre23XGR+A1cZawrUvkon2Cx3x7ua5I68xGo ')
如果我删除或不删除空格,它似乎没有什么区别。
谁能告诉我我做错了什么?
编辑:有人问我那些 "blanks" 是否真的是空格。至少我是这么认为的,因为它们在编辑器和浏览器中以一个的形式出现,并且也以一个的形式复制。我试图手动删除它们,但没有任何区别。 我也尝试使用字符串连接而不是插值,但它也没有任何区别。
我现在不是先将缓冲区转换为字符串,而是将散列存储为原始二进制数据 (data-type bytea),因为它是由 sodium-native 生成的。这也使密码验证变得微不足道。请务必遵循 mu is too short 关于 SQL 注入的建议。