如何使用与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中拥有相同的输出。 我的问题是:
- 我怎样才能做到这一点?
- android java中是否有任何类文件或默认函数,以便我可以使用它来实现这一目标?
- 我是否必须编写自定义函数来实现此目的?
我也想用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进行散列。 此外,你不能(再次,撇开)“解密”哈希,因为哈希函数是一种方式。