4

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

在此先感谢,汤米

4

1 回答 1

6

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

如果您想要的是将十六进制字符串转换为 blob 再到 base64 字符串,这就是您在问题的开头段中所说的,

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

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

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

于 2012-07-08T08:01:26.440 回答