PHP crypt(pass, salt)在Java中的替代- Blowfish算法


PHP crypt(pass, salt) alternative in Java - Blowfish algorithm

我在php服务器上使用crypt函数:

$hash = crypt($password, '$2y$10$' . $salt);

使用Blowfish方法对密码进行哈希。

我正在寻找java等价的crypt密码。

我找到了这个代码,但是我不知道在哪里添加了$salt。更多上图:

String key = "abcd";
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(cipher.ENCRYPT_MODE, keySpec);
return DatatypeConverter.printBase64Binary(cipher.doFinal(key.getBytes()));

没有回答你的问题,但也许它有帮助:

Apache Commons Codec库包含Linux crypt(3)兼容函数,至少适用于des,md5,sha256和sha512基于crypt()算法,以防您真的不需要blowfish,但只是比传统的基于des的哈希更强的东西(然后使用sha512):http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/Md5Crypt.java?view=markup

还有其他实现Blowfish算法的源代码,但它是用C编写的:http://doxygen.postgresql.org/crypt-blowfish_8c_source.html

正如您所看到的,crypt()使用的算法仅基于这些加密密码,但通过管道将输入传输数千次以获得一个不错的哈希值。

现在我发现了一些crypt(3)的java实现与blowfish:

http://www.mindrot.org/projects/jBCrypt/(最新更新2010)

http://docs.spring.io/spring-security/site/docs/3.2.3.RELEASE/apidocs/org/springframework/security/crypto/bcrypt/BCrypt.html