sad*_*zzy 2 ruby python base64 hmacsha1
我如何转换
import base64
import hashlib
import hmac
key = ''
text = 'GET\n\n\nSat, 22 Mar 2014 13:49:42 +0000\n'
base64.b64encode(hmac.new(key, text, hashlib.sha1).hexdigest())
#=> 'ZmUxN2YxMDQxMTdlODg3MDljMTRjYjY0ZGU1NDk1MjgwNzI2Yjk1Zg=='
Run Code Online (Sandbox Code Playgroud)
进入Ruby 1.9.3?
这样它返回不同的字符串:
require 'base64'
require 'digest'
require 'digest/hmac'
require 'cgi'
require 'openssl'
key = ''
text = 'GET\n\n\nSat, 22 Mar 2014 13:49:42 +0000\n'
hex = Digest::HMAC.hexdigest(key, text, Digest::SHA1)
Base64.urlsafe_encode64(hex)
#=> "YjdlNzBhMjFkZmRmZDFlMjM2Mzg5ZjYxYWE3NWEyZTJhN2I3MWNhMA=="
Run Code Online (Sandbox Code Playgroud)
我应该如何生成哈希以使其等于Python的结果?
首先,'\n'在Ruby中意味着字面\和n.要表示换行符,您需要使用双引号字符串:"\n".
参数的顺序Digest::HMAC.hexdigest与python版本不同.根据该Digest::HMAC文件,不鼓励使用它.请OpenSSL:HMAC改用.
所以ruby脚本应该被理解为:
require 'base64'
require 'openssl'
key = ''
text = "GET\n\n\nSat, 22 Mar 2014 13:49:42 +0000\n"
# hex = Digest::HMAC.hexdigest(text, key, Digest::SHA1) # <-- discouraged
hex = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), key, text)
p Base64.urlsafe_encode64(hex)
# => "ZmUxN2YxMDQxMTdlODg3MDljMTRjYjY0ZGU1NDk1MjgwNzI2Yjk1Zg=="
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1190 次 |
| 最近记录: |