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

时间:2012-07-08 07:10:57

标签: perl sha1

我有一个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”中:)

提前致谢, 托米

1 个答案:

答案 0 :(得分:6)

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

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

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

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

忽略我之前的答案和修改。