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

标签 perl sha1

我有一个 PHP 应用程序,它的密码存储在数据库中作为 sha1($password) 的输出,这显然是二进制 SHA1 哈希的十六进制表示。 (据我了解)

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

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

fatal error :在第 1 行的 php shell 代码中调用未定义函数 hex2bin()

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

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

说清楚,我是不是 试图将十六进制数转换为二进制数。这是二进制值的十六进制表示,存储在 perl“字符串”中:)

提前致谢,
汤米

最佳答案

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

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

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

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

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

关于perl - 在 PERL 中将 SHA1 十六进制转换为 base64 编码(对于 Apache htpasswd),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11381337/

相关文章:

html - 如何仅使用 HTML::Table 为数据行设置列类?

php - 如何从php中的sha1()获取加密字符的原始字符串?

PHPMailer,SMTP 错误无法连接到 smtp 主机

arrays - Perl : creating array of known size

perl - 出错时重新启动 Perl 脚本? (Perl 新手)

Perl 5.8 从 SSH 命令获取标准输出

javascript Triple des 加密值和 java Triple des 加密值不匹配为什么?

linux - 根据另一个文件中的关键字在文件目录中搜索

php - 基本 mysql sha1 密码有效性检查

unicode - SHA-1 和 Unicode