mysql - 使用“文本”数据类型在 MySQL 中存储密码哈希?
问题描述
不,这个问题不是众多“存储密码的最佳 MySQL 数据类型”的重复问题。
我的密码哈希目前是在 node.js 上使用 pbkdfSync 制作的,我将输出设置为 128(无论它是什么字节),它正在推出一个 256 字符的哈希。
你可能会问有什么问题?嗯,我就是这么想的。在我遇到这个问题之前:“使用 VARCHAR 时,列密码的值太长”。
许多谷歌搜索都说 varchar 字符限制为 65,535 个字符,但出于某种原因对我来说它只有 255 个,而哈希值比这大一个字符。
所以这里的问题是:我应该更改我的哈希输出大小,以便可以使用 CHAR 数据类型,还是应该继续使用 TEXT 数据类型?或者有没有办法获得 char 和 varchar 的 65,535 个字符限制?
我正在使用最新的 MySQL 版本。
编辑:还有更多,我正在加密哈希和盐,加密输出是 512 个字符的哈希和 344 个盐!
解决方案
您可以将列的类型更改为 VARCHAR(512),这将允许您在列中存储超过 255 个字符(实际上是 512)。可以使用从 1 到 8000 的值,或者使用 VARCHAR(MAX) 作为最大的值(在数据条目长度变化很大的情况下)。
在你的情况下,尝试这样的事情:
`ALTER TABLE name_of_your_table
CHANGE COLUMN password password VARCHAR(512) NOT NULL DEFAULT '';`
推荐阅读
- jenkins - Jenkins Pipeline - ssh-agent 找不到凭据
- ios - Xcode 11.1 错误:产生多个命令
- sql - 带有子字符串的棘手 SQL
- c# - 为什么从应用程序调用时 sql 过程会返回 0 行?
- android - 我用cordova开发了一个android应用程序,我也想把它转换成iOS
- java - java和auth0:令牌签名无效异常
- java - Java,如果勾选了多个复选框?
- r - R - object formula not found inside a function
- android - 使应用程序能够在文件对话框中打开特定扩展名不再起作用
- c - uint8_t 类型数组的元素是否总是被打包到内存的连续字节中?