perl – 为什么HMAC SHA-1会使用相同的输入返回不同的摘要?
我正在尝试为Amazon S3 Web服务构建一个可用的加密签名,使用Objective C编写连接库.
我已经遇到了使用ObjC代码的HMAC SHA-1摘要问题,因此我将其放在一边,查看现有的,正在运行的Perl代码,以尝试解决摘要创建问题. 我正在测试Net :: Amazon :: S3软件包的s3ls命令的HMAC SHA-1摘要输出,并将其与我提取并放入其自己的perl脚本的_encode子例程进行比较: #!/usr/bin/perl -w use MIME::Base64 qw(encode_base64); use Digest::HMAC_SHA1; use String::Escape qw( printable unprintable ); sub _ascii_to_hex { (my $str = shift) =~ s/(.|n)/sprintf("%02lx",ord $1)/eg; return $str; } sub _encode { my ( $aws_secret_access_key,$str ) = @_; print "secret key hex: "._ascii_to_hex($aws_secret_access_key)."n"; my $hmac = Digest::HMAC_SHA1->new($aws_secret_access_key); $hmac->add($str); my $digest = $hmac->digest; print "cleartext hex: "._ascii_to_hex($str)."n"; print "digest hex: "._ascii_to_hex($digest)."n"; my $b64 = encode_base64( $digest,'' ); print "encoded: ".$b64."n"; } my $secret = "abcd1234"; my $cleartext = "GETnnnFri,12 Dec 2008 10:08:51 GMT+00:00n/"; _encode($secret,$cleartext); 以下是此脚本的示例输出: $./testhmac.pl secret key hex: 6162636431323334 cleartext hex: 4745540a0a0a4672692c2031322044656320323030382031303a30383a353120474d542b30303a30300a2f digest hex: 63308f9b8a198440d6d8685a3f3f70d0aab02f68 encoded: YzCPm4oZhEDW2GhaPz9w0KqwL2g= 我正在测试的是,如果我将相同的密钥和明文输入到Net :: Amazon :: S3包的相同_encode函数中,我应该看到完全相同的密钥,明文和摘要字节. 实际上,我获得了密钥和明文的相同字节. 但是我得到了一些不同的摘要(当然还有base64编码),例如: $s3ls --access-key=foobar --secret-key=abcd1234 ... secret key hex: 6162636431323334 cleartext hex: 4745540a0a0a4672692c2031322044656320323030382031303a30383a353120474d542b30303a30300a2f digest hex: c0da50050c451847de7ed055c5286de584527a22 encoded: wNpQBQxFGEfeftBVxSht5YRSeiI= 我已经验证了密钥和明文是两个脚本的相同输入.编码子例程在两个脚本中几乎完全相同(传递给子例程的未使用的参数除外,我从自定义版本中删除了该参数). 如果输入字节和_encode子例程相同,那么在两种情况下会导致HMAC SHA-1摘要的计算方式不同? (我还在RFC 2201验证了针对测试用例的两个脚本.) 解决方法
我发现比较中哈希的主要问题是:
>确保两个比较中的数据和密钥相同 尝试使用Digest :: SHA模块为您创建哈希并将结果与??之比较. use Digest::SHA qw(hmac_sha1_hex); my $hash = hmac_sha1_hex($data,$key); 请参阅http://perldoc.perl.org/Digest/SHA.pdf的文档 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |