perl - 如何在CGI中编码base64 md5?

标签 perl cgi base64 md5

我需要在 CGI (Perl) 中发布某种表单,其中一个输入需要以 base64 md5 进行哈希编码。应该得到的方面提供的示例,在 PHP 中工作如下:

$hash = base64_encode(md5( $data1."|". $data2."|". $data3));

为了使其在 CGI 中工作,我使用以下代码:

use Digest::MD5 qw( md5_base64 );
my $base64_digest = md5_base64($data1."|". $data2."|". $data3);

但是结果上的编码字符串与我在 PHP 中执行的结果不同。看来我在 CGI 中做错了。如何正确编码?


$ echo '<? echo base64_encode(md5("abc|def|ghi")), "\n"; ?>' | php
MzJjNDcyZmE0MjI3MWYyYWE0YTg1MWZkMmM1NzRkODc=

$ perl -MDigest::MD5=md5_base64 -E'say md5_base64("abc|def|ghi");'
MsRy+kInHyqkqFH9LFdNhw

最佳答案

Perl                             PHP
-------------------------------  ------------------------------ 
md5($string)                     md5($string, 1)
md5_hex($string)                 md5($string, 0)
md5_base64($string)              base64_encode(md5($string, 1))
encode_base64(md5_hex($string))  base64_encode(md5($string, 0))   WASTEFUL

PHP 的 md5 生成哈希值的十六进制,类似于 D::MD5 的 md5_hex

$ echo '<? echo md5("abc|def|ghi"), "\n"; ?>' | php
32c472fa42271f2aa4a851fd2c574d87

$ perl -E'
    use Digest::MD5 qw( md5_hex );
    say md5_hex("abc|def|ghi");'
32c472fa42271f2aa4a851fd2c574d87

base64 可以用更少的字符传达相同的信息。

$ echo '<? echo base64_encode(md5("abc|def|ghi", 1)), "\n"; ?>' | php
MsRy+kInHyqkqFH9LFdNhw==

$ perl -E'
   use Digest::MD5 qw( md5_base64 );
   say md5_base64("abc|def|ghi");'
MsRy+kInHyqkqFH9LFdNhw

$ perl -E'
   use Digest::MD5  qw( md5 );
   use MIME::Base64 qw( encode_base64 );
   say encode_base64(md5("abc|def|ghi"));'
MsRy+kInHyqkqFH9LFdNhw==

(删除尾随的 == 不会更改该值。)

你目前在 PHP 中所做的事情是非常浪费的。它比所需的时间长得多,并且需要额外的 CPU 时间来生成它。

$ echo '<? echo base64_encode(md5("abc|def|ghi")), "\n"; ?>' | php
MzJjNDcyZmE0MjI3MWYyYWE0YTg1MWZkMmM1NzRkODc=

$ perl -E'
   use Digest::MD5  qw( md5_hex );
   use MIME::Base64 qw( encode_base64 );
   say encode_base64(md5_hex("abc|def|ghi"), "");'
MzJjNDcyZmE0MjI3MWYyYWE0YTg1MWZkMmM1NzRkODc=

关于perl - 如何在CGI中编码base64 md5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16951527/

相关文章:

perl - 在处理上传请求之前,如何在 Perl 中获取文件大小?

Python:base64解码时忽略 'Incorrect padding'错误

javascript - 在javascript中将十六进制字符串转换为base64

mysql - DBI:如果第一个数据库不存在,则连接到另一个数据库

sql - 如何用面向对象的 Perl 组装 SQL?

perl - 无法通过 Perl CPAN 安装 Crypt::OpenPGP

Windows - 使用 perl 监视目录中是否有新文件删除/创建

linux - CGI 无法在 ltib linux 2.6.34 上的 busybox 1.15.0 上使用 httpd 服务器(找不到 404 页面)

python - 如何在网站上显示实时 python 脚本输出?

ios - 在 iOS 上解码 Base64 数据