带有bcrypt的BINARYtypes的MYSQL字段
我正在看看有关字段长度和types用于bcrypt哈希的这个问题 。 几个答案提到使用BINARY
MYSQL列的types。 但是,使用mysql node.js模块读取此列时,会将BINARY列读取为缓冲区types而不是string。 bcrypt比较函数bcrypt.compare(password, hash, callback)
不喜欢缓冲区types:
Error: data and hash must be strings at node_modules/bcrypt/bcrypt.js:150:16
这使我有两个问题:
首先,我假设我想要做的是hash_buffer.toString()
,但我注意到在文档中有可以使用不同的字符编码。 我不确定使用正确的编码是因为数据并不真正代表实际的字符。 由于我想二进制数据保持不变,我猜测ASCII。 任何人都可以确认吗?
其次,我不明白为什么不使用CHAR
数据types。 哈希是专门做成一个可打印的string。 据我所知,MYSQL比较可能不会按预期进行,但是没有适当的时间来search或按密码散列进行sorting。
一般来说,如果MySQL是做比较的话,那么使用BINARY列存储bcrypt哈希值是有意义的。 二进制整理将防止不必要的比较结果,例如'A'
等于'a'
; 这在Base64编码中有很大的不同。
但是,如果只在应用程序中执行比较,则可以节省麻烦,并使用常规CHAR列来存储散列值。