简述如果要存储用户的密码散列,应该使用什么字段进行存储?
存储用户密码散列时,建议使用以下类型的数据库字段:
- 字段类型
选择 VARCHAR(255)(或更长,如某些哈希算法需要),原因:- 兼容主流哈希算法的输出长度(如 bcrypt 约 60 字符,Argon2 可能更长)。
- 避免因字段过短导致哈希值被截断。
- 关键特性
- 大小写敏感:校对规则设置为 _bin(如 utf8mb4_bin),确保哈希值的大小写敏感。
- 唯一字符支持:使用 utf8mb4 字符集,兼容特殊符号(如 Base64 编码中的 +/=)。
- 额外要求
- 算法选择:优先使用自适应哈希算法(如 bcrypt、Argon2),而非 SHA 系列,因其抗暴力破解能力更强且内置盐值管理。
- 独立字段:避免与其他数据混存,单独设置密码散列字段。
- 访问控制:严格限制数据库权限,防止散列泄露。
示例 SQL 定义:
password_hash VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL