我有一个PHP应用程序,其密码存储在数据库中作为sha1($ password)的输出,这显然是二进制SHA1哈希的十六进制表示.(据我所知)
我想将其转换为兼容Apache .htpassword文件的格式,它需要是base64编码的二进制值或base64_encode的输出(sha1($ password,true)).
我找到了这个主题:将base64'd SHA1哈希转换为Hex哈希 ......这与我需要做的相反,而且效果很好.我试图更改命令的顺序并使用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);
Run Code Online (Sandbox Code Playgroud)
它与你想要的完全匹配:base64_encode(sha1($ password,true))
忽略我以前的答案和编辑.