1

我正在尝试使用此代码生成哈希值

use Digest::SHA qw(sha1_hex); print sha1_hex("prady@prady.com")

生成的值为

642732893b7d25cf6a47773fa1c4988fac2ff3ad

当我使用免费生成器检查哈希码时

http://sha1-hash-online.waraxe.us/

我得到哈希码为

e49ece87a60590483bb74c24e82f9d64d13d98c1

我通过从字符串中删除@符号执行了相同的测试,我从网站以及代码中获得了匹配值。两者都返回相同的哈希码

08e1698b5818d8fdf0f7b31132c3b44c49671644

由代码和网站生成的哪个是正确的?这是在字符串上使用 @ 符号时的已知行为吗?

4

2 回答 2

4

一直用use strict; use warnings;

与您的说法相反,您@的字符串中没有。

于 2012-11-08T09:14:58.807 回答
3

Using @something inside a double-quoted string is interpreted as an array name by Perl. You would have caught that mistake if you'd used use warnings; and use strict;. The solution is simple: escape the @, like this: print sha1_hex("some\@where.org"). Or use single-quoted strings.

于 2012-11-08T09:16:11.883 回答