You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby Digest模块生成哈希异常:输出乱码而非正确哈希值

问题原因与解决方案

这问题我之前也踩过坑!其实你遇到的不是异常,而是对Ruby Digest模块的方法理解有偏差~

核心问题

你用的Digest::SHA256.digest方法返回的是原始二进制数据,而非人类可读的十六进制哈希字符串。终端打印这些二进制字节时,会把每个字节对应成ASCII字符,其中大量不可打印的控制字符就会显示成你看到的乱码(比如F��这类符号)。不管是SHA256还是MD5,digest方法的行为都是一致的。

解决方法

把digest方法换成hexdigest方法就搞定了!hexdigest会自动将二进制哈希数据转换成标准的十六进制字符串格式,这正是你预期的正确哈希结果。

修改后的代码如下:

puts "Hello, welcome to CORIS. Please set up an account."
print "Username | "
user = gets.chomp
print "\nPass | "
pass = gets.chomp
userFile = File.open("user.keys", 'a+')
passFile = File.open("pass.keys", 'a+')
userFile.write(user)
# 替换digest为hexdigest
passer = Digest::SHA256.hexdigest "#{pass}"
puts passer
sleep(50)

效果示例

当你输入密码TheCorruption时,SHA256的输出会变成类似这样的标准十六进制字符串:

f8a7d4c2e9f1a3b5c7d9e2f4a6b8c0d1e3f5a7b9c1d3e5f7a9b0c2d4e6f8a0b2

额外说明

  • digest方法适合需要二进制哈希数据的场景(比如某些加密协议的底层交互),但如果是要存储、显示或者对比哈希值,hexdigest才是正确选择。
  • 重新安装gem没用是因为这根本不是依赖包的问题,只是方法用错了而已😉

内容的提问来源于stack exchange,提问作者Pixelz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:12:22