在字符串中使用@时哈希值不正确

时间:2012-11-08 09:11:53

标签: perl hash hashcode

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

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

生成的值是

  

642732893b7d25cf6a47773fa1c4988fac2ff3ad

当我使用自由生成器检查哈希码时

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

我得到哈希码为

  

e49ece87a60590483bb74c24e82f9d64d13d98c1

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

  

08e1698b5818d8fdf0f7b31132c3b44c49671644

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

2 个答案:

答案 0 :(得分:4)

始终使用use strict; use warnings;

与您的声明相反,您的字符串中没有@

答案 1 :(得分:3)

在双引号字符串中使用@something被Perl解释为数组名称。如果您使用use warnings;use strict;,就会发现错误。解决方案很简单:转义@,如下所示:print sha1_hex("some\@where.org")。或者使用单引号字符串。