有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使相同的密码与java和php兼容?

我使用了PHP crypt函数对密码进行哈希运算。 例如:

<?php

$hash = '$2y$08$ffWmSGZOM5pNJpHNvpqMa.z01BL25WGoXViaWYhxS0WRaftgAxhkC';
$test = crypt("test", $hash);
$pass = $test == $hash;

echo "Test for functionality of compat library: " . ($pass ? "Pass" : "Fail");
echo "\n";

现在: 如果我使用php bcryptpassword_hash()函数,我会得到以下输出:

密码:test

使用password_hash()的bcrypted密码是: $2y$08$FFWMSGZOM5PNJPNVPQMA。z01BL25WGoXViaWYhxS0WRaftgAxhkC

现在我想在Android Java中获得相同的输出。 我的问题是:

  1. 我怎样才能做到这一点
  2. 安卓java中是否有任何类文件或默认函数可以用来实现这一点
  3. 我是否必须编写一个自定义函数来实现这一点

我还想用java解密密码

任何附有示例的答案都将不胜感激。提前感谢大家


共 (3) 个答案

  1. # 1 楼答案

    首先,我们需要了解PHP中的crypt函数的功能php.net states:

    "crypt() will return a hashed string using the standard Unix DES-based algorithm or alternative algorithms that may be available on the system."

    让我们假设它是DES,即使DES不是散列算法

    好了,现在我们知道使用什么“hash”函数了,这只是用另一种语言实现它的一个例子(暂且不说迂腐,hash函数应该总是在给定相同输入的情况下返回相同的输出)

    下面是一个显示如何在Java中实现DES的链接:http://www.mkyong.com/java/jce-encryption-data-encryption-standard-des-tutorial/

    除此之外,DES严重损坏,应避免使用。至少我会推荐SHA-2用于散列。此外,您不能(同样,撇开学究不谈)对散列进行“解密”,因为散列函数是一种方法

  2. # 2 楼答案

    我使用的是laravel默认密码hasihing算法,我使用的是bcrypt。 我的问题是将其转换为与Java中相同的格式。我使用jbcrypt获得了相同的密码。 例如:

    此处laravel bcrypted密码为=“$2y$08$rW76CEOBYmWzeANFqNOQyei8ArmYpacN6MIRjS55sgpT.6p/5eMv。” 我已将该字符串放入变量中

    String a_hash = "$2y$08$rW76CEOBYmWzeANFqNOQyei8ArmYpacN6MIRjS55sgpT.6p/5eMv.";
    

    下面的代码给出了匹配的密码结果:

    if (BCrypt.checkpw(candidate, a_hash))
                System.out.println("It matches");
            else
                System.out.println("It does not match");
    

    我使用了Damien Miller的BCrypt库来实现这一点。 以下是有用的URL: http://www.mindrot.org/projects/jBCrypt/

    Using jBCrypt to salt passwords in Android App causes a long hang

    Using jBCrypt to salt passwords in Android App causes a long hang

  3. # 3 楼答案

    如果您坚持在Java中使用bcrypt。试试这个,jBCrypt