使用python PassLib创建的新密码与在PHP中创建的密码相同

使用python PassLib创建的新密码与在PHP中创建的密码相同,php,python,passwords,crypt,Php,Python,Passwords,Crypt,使用crypt()在PHP中生成密码。一个示例输出是: $2a$10$F47zZrxfkRN4M4djSBPKXeS5QFdOwSrHn03m40WR1rI8g1cBGHgMO 现在,我需要在Python中生成密码,这应该在PHP中进行验证 PHP代码: function generateSalt($cost = 10) { if (!is_numeric($cost) || $cost < 4 || $cost > 31) { die('Cost para

使用
crypt()
在PHP中生成密码。一个示例输出是:

$2a$10$F47zZrxfkRN4M4djSBPKXeS5QFdOwSrHn03m40WR1rI8g1cBGHgMO
现在,我需要在Python中生成密码,这应该在PHP中进行验证

PHP代码:

function generateSalt($cost = 10) {
    if (!is_numeric($cost) || $cost < 4 || $cost > 31) {
        die('Cost parameter must be between 4 and 31.');
    }
    // Get some pseudo-random data from mt_rand().
    $rand = '';
    for ($i = 0; $i < 8; ++$i) {
        $rand.=pack('S', mt_rand(0, 0xffff));
    }
    // Add the microtime for a little more entropy.
    $rand .= microtime();
    // Mix the bits cryptographically.
    $rand = sha1($rand, true);
    // Form the prefix that specifies hash algorithm type and cost parameter.
    $salt = '$2a$' . str_pad((int) $cost, 2, '0', STR_PAD_RIGHT) . '$';
    // Append the random salt string in the required base64 format.
    $salt .= strtr(substr(base64_encode($rand), 0, 22), array('+' => '.'));
    return $salt;
}

crypt('apasswd', generateSalt());
// Output: $2a$10$F47zZrxfkRN4M4djSBPKXeS5QFdOwSrHn03m40WR1rI8g1cBGHgMO
函数生成salt($cost=10){
如果(!是数值($cost)| |$cost<4 | |$cost>31){
模具('成本参数必须介于4和31之间');
}
//从mt_rand()获取一些伪随机数据。
$rand='';
对于($i=0;$i<8;++$i){
$rand.=pack('S',mt_rand(0,0xffff));
}
//加上微时间,再多一点熵。
$rand.=微时间();
//以加密方式混合比特。
$rand=sha1($rand,true);
//形成指定哈希算法类型和成本参数的前缀。
$salt='$2a$'.str_pad((int)$cost,2,'0',str_pad_RIGHT)。'$';
//以所需的base64格式追加随机salt字符串。
$salt.=strtr(substr(base64_encode($rand),0,22),数组('+'=>');
退还$salt;
}
crypt('apasswd',generateSalt());
//产出:$2a$10$F47zZrxfkRN4M4djSBPKXeS5QFdOwSrHn03m40WR1rI8g1cBGHgMO

我希望能够使用python生成相同的哈希。我该怎么做呢?

您不能这样做,因为您正在使用随机生成的salt生成哈希。因此,您的最终哈希值将始终不同

@Marc,没有错误。也希望在Python中生成相同的密码机制。所以,我可以在Python应用程序中验证用户。很抱歉,stackoverflow就像它的名字一样,是一个支持错误的平台,而不是免费编码的平台。python的crypt/hashlib库有很好的文档记录。如果你有python代码,我想帮你顺便说一句:我不这么认为。因为在验证时,我们不传递salt,但是
crypt()
验证。e、 g:
crypt('apasswd','2a$10$F47zZrxfkRN4M4djSBPKXeS5QFdOwSrHn03m40WR1rI8g1cBGHgMO')=='2a$10$f47zzrxfkrn4djsbpkxes5qfdowsrhn03m40wr1ri8g1cbghgmo'
。所以,盐可以是任何东西!因此,您的问题是错误的,您不想像在php中那样生成哈希。您只想在不生成salt的情况下生成密码,因为salt已经由php生成