【发布时间】:2020-03-15 01:41:18
【问题描述】:
#!/usr/bin/env perl
use Digest;
say Digest->new( 'SHA-1' )->add('test')->b64digest; # qUqP5cyxm6YcTAhz05Hph5gvu9M
SELECT TO_BASE64(SHA1('test')); # YTk0YThmZTVjY2IxOWJhNjFjNGMwODczZDM5MWU5ODc5ODJmYmJkMw==
因此,相同的 ASCII 字 test 在 Perl 中编码为 qUqP5cyxm6YcTAhz05Hph5gvu9M,在 MySQL 中编码为 YTk0YThmZTVjY2IxOWJhNjFjNGMwODczZDM5MWU5ODc5ODJmYmJkMw==。
为什么?
【问题讨论】:
-
接缝/感觉像 Perl 很可能会从
Digest->new( 'SHA-1' )->add('test')中返回 RAW 字节,而不是像 MySQL 使用SHA1()那样提供十六进制数字... -
是的,就是这样:
perl -MDigest -MMIME::Base64 -E 'say encode_base64(Digest->new("SHA-1")->add("test")->hexdigest)'->YTk0YThmZTVjY2IxOWJhNjFjNGMwODczZDM5MWU5ODc5ODJmYmJkMw== -
@RaymondNijland 你应该这样回答。
-
@RaymondNijland 正确的猜测。你应该为此获得荣誉。
-
“正确的有根据的猜测。你应该得到它的荣誉” @Shawn 很公平,但我发现有效的答案需要与代码一起存在,否则它不是真正的答案.. 无论如何我不能在 Perl 中编程,因为我从来没有这样做过,因为 Perl 接缝/感觉与 PHP 或 Python 相当..