使用Java中的自定义盐加密Blowfish

时间:2014-10-16 09:09:20

标签: java encryption blowfish

在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")

1 个答案:

答案 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