在PHP中,Blowfish哈希的实现只是调用函数
string crypt(string $str [,string $salt])
传递一个由“$ 2a $”,“$ 2x $”或“$ 2y $”组成的相应字符串盐,两位数的成本参数“$”和22个字符{{3} }):
<?php
echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu04985'));
结果是:
$2a$10$7711cbpe58dfpogiu0498u5Vh773A3qx.3LE3ro3NX7F9c9N7.pOm
现在我需要将此实现移至Java(或Scala),并且不知道如何获得相同的结果 ......
P.S。我正在使用Cipher.getInstance("Blowfish")
答案 0 :(得分:2)
您可能想要试用jBcrypt库:
public String crypt(String clearText) {
return BCrypt.hashpw(clearText, BCrypt.gensalt(10));
}
请注意,我使用10作为成本因素只是为了遵守您的示例代码,但12或更高会更好。
为了完整起见,这是如何重现您的示例:
String encrypted = BCrypt.hashpw("SAD123", "$2a$10$7711cbpe58dfpogiu04985");
// encrypted is $2a$10$7711cbpe58dfpogiu0498u5Vh773A3qx.3LE3ro3NX7F9c9N7.pOm