新手问题 base64encode 的值通过 md5 不一致的问题

kxu1988 · 2019年04月03日 · 最后由 kxu1988 回复于 2019年04月04日 · 859 次阅读
def generateSignature(params)
  hash  = OpenSSL::HMAC.digest('sha256', "as2das231d12asdsada1212a", params)
  result =  Base64.encode64(hash)
  #result.gsub!("\n", '')
  puts "========result:#{result}"
  signature = Digest::MD5.hexdigest(result)
  puts "========signature====#{signature}"
end
  • 打印的 result 值为 “gmBQdw9tdiWDFCUUshLNYdrHIRHyeTN8kPNWipUBbd8=”
  • 打印的结果 signature 是"32b529663f5a8cca9969cf89f0775a46"
  • 使用 md5 在线加密 result(https://md5jiami.51240.com), 结果是:43708b7e323e32f36b0ba609757b5e30
  • 此时两个结果不一致

  • 当我把代码里 signature = Digest::MD5.hexdigest(result) 里的 result 换成:
signature = Digest::MD5.hexdigest(gmBQdw9tdiWDFCUUshLNYdrHIRHyeTN8kPNWipUBbd8=)

- 此时,打印的 signature 跟 md5 在线加密(https://md5jiami.51240.com)的结果一致

  • 请问我哪里出了问题?

看你写了这行 #result.gsub!("\n", '') ,是不是遇到换行。

puts result.inspect 打印看看有无换行。

另外 Base64.strict_encode64 是生成无换行格式的。

pry(main)> result =  Base64.encode64(hash)
#=> "gmBQdw9tdiWDFCUUshLNYdrHIRHyeTN8kPNWipUBbd8=\n"
Rei 回复

确实是这样,改为 strict_encode64 可以,多谢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册