如何使用与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 bcrypt passowrd_hash()函数,我得到以下输出:

密码:测试

使用passowrd_hash()加密密码是:$ 2y $ 08 $ ffWmSGZOM5pNJpHNvpqMa.z01BL25WGoXViaWYhxS0WRaftgAxhkC

现在我希望在Android Java中拥有相同的输出。 我的问题是:

  1. 我怎样才能做到这一点?
  2. android java中是否有任何类文件或默认函数,以便我可以使用它来实现这一目标?
  3. 我是否必须编写自定义函数来实现此目的?

我也想用java解密密码。

任何答案的例子将不胜感激。 感谢所有人。

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

我使用lacryvel默认密码hasihing algorthim使用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/

在Android应用程序中使用jBCrypt加密密码会导致长时间挂起

在Android应用程序中使用jBCrypt加密密码会导致长时间挂起

首先,我们需要看一下PHP中的crypt函数。 php.net说:

“crypt()将使用标准的基于Unix DES的算法或系统上可用的替代算法返回散列字符串。”

让我们假设它是DES,即使DES不是哈希算法。

好的,所以现在我们知道使用了什么“哈希”函数,它只是一个实现它的另一种语言的情况(现在除了现在,在给定相同输入的情况下,哈希函数应该总是返回相同的输出)。

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

除此之外,DES严重破坏,应该避免。 至少我建议使用SHA-2进行散列。 此外,你不能(再次,撇开)“解密”哈希,因为哈希函数是一种方式。