【问题标题】:python and php bcryptpython和php bcrypt
【发布时间】:2014-02-15 06:45:50
【问题描述】:

我使用 Laravel 注册用户。它像这样使用 bcrypt:

$2y$10$kb9T4WXdz5aKLSZX1OkpMOx.3ogUn9QX8GRZ93rd99i7VLKmeoXXX

我目前正在制作另一个脚本,该脚本将使用 python 对来自另一个来源的用户进行身份验证。我安装了py-bcrypt 并尝试了它。格式如下:

$2a$10$Vj0b0GZegbpXIIpa/lvi9OjkAFJ5zNzziVRW7yN9ssDKVQDX47XXX

但在 python 上,由于invalid salt,我无法对用户进行身份验证。

我注意到 Laravel bcrypt 使用 $2y 而 python 使用 $2a。我该如何解决这个问题?

注释:

I used 10 rounds for both crypts.

【问题讨论】:

    标签: php python


    【解决方案1】:

    我刚刚发现2a 和2y 非常相似,除了名称(前缀)。

    将 laravel 哈希的 2y 替换为 2a 仍然保持哈希的完整性,即使您替换身份,也应该可以正常工作并匹配密码。

    在我的情况下(问题),解决方案是使用str.replace('$2y$', '$2a$'),并且一切正常。 现在 py-bcrypt 接受了没有错误 invalid salt 的哈希。

    祝你好运。

    【讨论】:

    • 虽然这可能是您最初发布它时的最佳解决方案,但您现在应该接受@eduardogoncalves 的最新答案。
    【解决方案2】:

    现在在 2018 年,我们可以使用来自 php 的哈希字符串:

    <?php echo password_hash( "302010", PASSWORD_BCRYPT ); ?>
    

    $2y$10$20l2aC6kIyltpgWLmp80n.4itLhmoP58CU80m1 m/ukE8TZYJAASx.

    用python检查一下:

    >>>import bcrypt
    >>>bcrypt.checkpw(b'302010',b'$2y$10$20l2aC6kIyltpgWLmp80n.4itLhmoP58CU80m1
    m/ukE8TZYJAASx.')
    

    是的

    或来自 python 的哈希字符串与 php

    >>>import bcrypt
    >>>hashed = bcrypt.hashpw(b'302010', bcrypt.gensalt())
    

    $2b$12$tbv8bBsuQUwq0GTCW0E2GeVUiS65ESb60fRVwbaVLlR1m4iwbbOWO

    <?php //validade hash in php
    if(password_verify ( "302010", '$2b$12$tbv8bBsuQUwq0GTCW0E2GeVUiS65ESb60fRVwbaVLlR1m4iwbbOWO' )){
      echo "valid";
    } else {
      echo "invalid";
    } ?>
    

    https://3v4l.org/ELWtU

    【讨论】:

      猜你喜欢
      • 2014-09-29
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      相关资源
      最近更新 更多