在PERL中将SHA1十六进制转换为base64编码(对于Apache htpasswd)

前端之家收集整理的这篇文章主要介绍了在PERL中将SHA1十六进制转换为base64编码(对于Apache htpasswd)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 PHP应用程序,其密码存储数据库中作为sha1($password)的输出,这显然是二进制SHA1哈希的十六进制表示. (据我所知)

我想将其转换为兼容Apache .htpassword文件的格式,它需要是base64编码的二进制值或base64_encode的输出(sha1($password,true)).

我找到了这个帖子:Convert base64’d SHA1 hashes to Hex hashes ……这与我需要做的相反,而且效果很好.我试图更改命令的顺序并使用hex2bin而不是bin2hex,但这不起作用:

致命错误:在第1行的PHP shell代码调用未定义的函数hex2bin()

显然,直到PHP 5.4才可用,并且此服务器仍在5.3.x上
http://php.net/manual/en/function.hex2bin.php

这是真正的问题.我实际上需要它在PERL中转换,最好只使用标准的内置模块来保持一切简单.我不确定为什么他们在这一步中使用perl,但是我正在尝试编辑一个更大的应用程序的一小部分,并且不想改变整个事情:)

为了清楚起见,我不是试图将十六进制数转换为二进制数.这是二进制值的十六进制表示,存储在perl“string”中:)

提前致谢,
汤米

解决方法

你解释了这么多,但仍然不确定你想要什么:/

如果您想要的是从十六进制字符串转换为blob到base64字符串,这就是您在问题的顶部段落中所说的内容,

use MIME::Base64;
my $bin = pack "H*",$hex_str;
my $encoded = encode_base64($bin);

它与你想要的完全匹配:base64_encode(sha1($password,true))

忽略我以前的答案和编辑.

猜你在找的Perl相关文章