关于Hashed and salted passwords存储显示差异的技术咨询
哈希加盐密码在数据库显示为随机符号是否符合预期?
这完全符合预期,核心是编码显示差异,不是存储错误,具体原因和验证方法如下:
哈希加盐结果的本质是二进制数据
哈希算法(比如bcrypt、SHA-256这类)输出的是二进制字节流,后端显示的是经过十六进制或Base64编码后的可读字符串;但如果数据库用BINARY/VARBINARY这类二进制字段存储,部分数据库客户端会强行用默认文本编码(比如UTF-8、ASCII)解析二进制数据,就会显示成乱码/随机符号。验证存储是否正确的方法
别盯着客户端显示的符号看,直接用SQL查询转换编码对比:SELECT HEX(hashed_password_column) FROM your_table WHERE user_id = 你的用户ID;把查询得到的十六进制字符串和后端拿到的哈希值对比,如果完全一致,说明存储没有问题。
优化显示的小技巧
如果想让数据库客户端直接显示可读的哈希字符串,要么在存储前就把二进制哈希转成十六进制/Base64字符串,用VARCHAR字段存储;要么每次查询时手动转换编码后查看。
内容的提问来源于stack exchange,提问作者Henryy
相关产品推荐
相关产品推荐

