我正在尝试使 blowfish 散列在 debian 服务器上可用于 php。
摘自 php 手册中有关 crypt() 函数的内容(http://php.net/manual/en/function.crypt.php),以下代码检查加密函数……
<?php
echo("DES is " . CRYPT_STD_DES."<br>Extended DES is ".CRYPT_EXT_DES."<br>MD5 is ".CRYPT_MD5."<br>BlowFish is ".CRYPT_BLOWFISH."<br>");
if (CRYPT_STD_DES == 1) {
echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "<br>\n";
}
if (CRYPT_EXT_DES == 1) {
echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "<br>\n";
}
if (CRYPT_MD5 == 1) {
echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "<br>\n";
}
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "<br>\n";
}
if (CRYPT_SHA256 == 1) {
echo 'SHA-256: ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "<br>\n";
}
if (CRYPT_SHA512 == 1) {
echo 'SHA-512: ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "<br>\n";
}
echo "System salt size: ". CRYPT_SALT_LENGTH;
?>
我的服务器上的结果显示可用的哈希值如下:
testDES 为 1 扩展 DES 为 0 MD5 为 1 BlowFish 为 0 标准 DES:rl.3StKT.4T8M MD5:$1$rasmusle$rISCgZzpwk3UhDidwXvin0
而在我的本地 ubuntu 机器上似乎有 blowfish 和 sha 系列可用。
我需要安装什么才能让 blowfish 在 debian 5.0 上的 php 中运行?
答案1
如果没有补丁,glibc 的 crypt() 函数不支持 $2a$ blowfish 哈希。如果您找到了其他发行版正在应用的补丁,那么您就可以使用该补丁重建 glibc。 本网站链接到 glibc 2.10.1 的补丁,您可能需要费一番周折才能将其应用于 lenny 的 glibc 2.7。如果您很幸运,PHP 会在运行时检测到 crypt() 可以做什么,否则您可能还必须重新编译 PHP。
根据 PHP 的加密文档从 php5.3 开始,PHP 有自己的 crypt() 实现,可以处理本地系统不支持的哈希算法。您可以从以下位置获取为 lenny (oldstable) 构建的 php 5.3 软件包php53 dotdeb 存储库。
如果您不能使用 5.3,那么 dotdeb 的 5.2 oldstable 存储库中的 php5.2 可能有足够新的 hardening/suhosin 补丁来添加 CRYPT_BLOWFISH。