Ruby 关于 Ruby 和 Python hmac 加密的不同的问题, 请高人解答

tianlibo · 2017年02月09日 · 最后由 tianlibo 回复于 2017年02月09日 · 1483 次阅读

今天在按照 python 的代码 用 ruby 实现的时候遇到一个问题:

ruby 加密:

2.2.5 :019 >   OpenSSL::HMAC.hexdigest('sha1', 'x{\xc3', 'qwertyuiop')
 => "1be02f3eb1bd9117708d779792fea566ffe8f5ad" 

python 加密

hmac.new('x{\xc3', 'qwertyuiop', sha1).hexdigest()
'c38fbfc8562404ad2610af08993bc9d4183fb5d6'

两者的加密结果 不同,后来排查发现 应该是 ' \ ' 导致的,但不知道具体原因,以及怎么解决?传入的字符串是打包成二进制的形成,所以会带' \ '

例如 '\xE7\xC6\xF6\xE9\xADX\x84}z\x18\xA2\xC15|\e\x90'

你可以用变量,而非字符串试试 (应该是字符串转义的问题)

转译的问题:

Python:

>>> a = 'x{\xc3'
>>> a 
'x{\xc3'
>>> print a
x{?
>>> len(a)
3

Ruby:

2.3.2 :001 > a = 'x{\xc3'
 => "x{\\xc3" 
2.3.2 :001 > puts a
x{\xc3
2.3.2 :001 > a.length
6

  • Python 改成 'x{\\xc3'
  • 或者 Ruby 改成 "x{\xc3"

注意!单引号、双引号

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