2

这怎么可能?我无法让 Ruby 给我与 PHP 相同的 MD5,也无法解决这个问题……我认为是编码,但似乎我已经设法让每个文件都保持相同的格式。

PHP 代码:(结果:bfa7df865d9f4aff62c4643d0e1cb33b)

echo md5("9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@#@akskd9");

带有 Digest-MD5 的 Ruby 代码:(结果:bd53907a1b47e9a381ee663ec75b59f4)

require 'digest/md5'
puts Digest::MD5.hexdigest("9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@#@akskd9")

带有 HMAC-MD5 的 Ruby 代码:(结果:d41d8cd98f00b204e9800998ecf8427e)

require 'hmac-md5'
puts HMAC::MD5.new("9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@#@akskd9").hexdigest
4

2 回答 2

7

使用单引号而不是双引号

Digest::MD5.hexdigest('9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@#@akskd9')
于 2013-02-15T17:55:03.503 回答
2

正是“#@”的组合使它想要将字符串末尾的“@akskd9”视为变量。

例如:

@akskd9 = "foobar"
puts "9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@#@akskd9"

=> 9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@foobar

..没有 # ,那么它会忽略 @ 符号:

@akskd9 = "foobar"
puts "9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@@akskd9"

=> 9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@@akskd9

...有趣的是,如果没有 # 之后的 {...},它将字符串的其余部分视为变量。

@ak = "foobar"
puts "9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@#@akskd9"

=> 9jdaksjdfosdjsljz91m1wms0zkzd0k0askd1m2l3!@3@
于 2013-02-15T18:25:13.323 回答