gpt4 book ai didi

mysql - 带有 bcrypt 的 BINARY 类型 MYSQL 字段

转载 作者:可可西里 更新时间:2023-11-01 08:29:16 25 4
gpt4 key购买 nike

我在看this question关于用于 bcrypt 哈希的字段长度和类型。几个答案提到使用 BINARY MYSQL 列类型。但是,当使用 mysql node.js 模块读取此列时,它将 BINARY 列读入缓冲区类型而不是字符串。 bcrypt比较函数bcrypt.compare(password, hash, callback)不喜欢缓冲区类型:

Error: data and hash must be strings
at node_modules/bcrypt/bcrypt.js:150:16

这引出了两个问题:

首先,我假设我想做的是 hash_buffer.toString(),但我注意到 the documentation可以使用不同的字符编码。我不确定要使用的正确编码是什么,因为数据并不真正代表实际字符。因为我希望二进制数据保持不变,所以我猜是 ASCII。谁能证实这一点?

其次,我不明白为什么不使用CHAR 数据类型。散列被专门制作成可打印的字符串。我知道 MYSQL 比较可能不会按预期进行,但无论如何都没有合适的时间来搜索密码哈希或按密码哈希排序。

最佳答案

一般来说,如果进行比较的是 MySQL,则使用 BINARY 列来存储 bcrypt 哈希是有意义的。二进制排序规则将防止不需要的比较结果,例如'A' 等于 'a';这对 Base64 编码有很大的影响。

但是,如果只在应用程序中执行比较,您可以省去麻烦并使用常规的 CHAR 列来存储哈希值。

关于mysql - 带有 bcrypt 的 BINARY 类型 MYSQL 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31421431/

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