不同操作系统上的PHP crypt功能

在我的php应用程序中,我使用php crypt()函数,其中我的salt值是用户名中的前两个字符。我注意到该函数在windows和linux上返回不同的结果。我还在w3cschools上读到这个函数在不同的操作系统上表现不同。可以配置php环境以便在两个操作系统上获得相同的结果吗? (修改加密模式不是一种选择。)     
已邀请:
crypt()使用操作系统使用的任何底层哈希函数,因此如果您需要可靠(常量)结果,可以使用其他哈希函数之一,如md5()或sha256(),sha512()。 如果希望crypt()使用特定的散列函数,则必须相应地指定散列参数,并检查主机操作系统是否支持该算法。例如(摘自crypt()的PHP Manual页面):
if (CRYPT_STD_DES == 1) {
        echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "n";
} 
但它非常依赖操作系统,因此我建议您使用独立的散列函数。或哈希()。 附加: 使用hash(),您首先要使用hash_algos()来检查哪个哈希值是支持的最佳哈希值,然后将其用作第一个参数,如下所示:
<?php
    $algos = hash_algos();
    if (in_array("sha256", $algos)) {
        $pass = hash ("sha256", "userpassword" . "salt");
    }
?>
希望这可以帮助。     
很难说没有看到实际的代码,但是假设底层代码支持指定的哈希值,则不应该这样。在PHP 5.3之前,这是操作系统代码,但从5.3开始,哈希在PHP中实现。 vanneto提供的信息有点误导。 crypt期望盐的格式表示所使用的算法,例如如果你想要河豚那么你会提供以下盐:
$2a$xx$yyyyyyyyyyyyyyyyyyyyyy
其中xx表示重复次数,yyyy ...是(22)base64位的实际盐。 vanneto(2个字母)提供的示例应使用单轮DES。     

要回复问题请先登录注册