java - 在 Java 中使用自定义盐进行 Blowfish 加密

标签 java encryption blowfish

在PHP中,Blowfish哈希的实现只是调用函数 string crypt(string $str [,string $salt]) 并传递一个由“$2a$”、“$2x$”或“$2y$”(两位数)组成的适当的字符串 salt成本参数、“$”和 22 个字符 ( http://php.net/manual/en/function.crypt.php ) :

<?php
  echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu04985'));

结果是:

$2a$10$7711cbpe58dfpogiu0498u5Vh773A3qx.3LE3ro3NX7F9c9N7.pOm

现在我需要将此实现移至 Java(或 Scala),并且不知道如何获得相同的结果...

附:我正在使用 Cipher.getInstance("Blowfish")

最佳答案

您可能想尝试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

关于java - 在 Java 中使用自定义盐进行 Blowfish 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400446/

相关文章:

java - 正则表达式 - 无法将西里尔字母与\w匹配

java - 如何在 Android 中暂停线程的消息队列?

c++ - 将 SecByteBlock 中的 key 传递给算法?

java - Blowfish 加密 - 在 php 和 java 中加密,我得到了不同的加密值

java - 如何在maven中解决 "failed to execute goal "maven-surefire-plugin :2. 19.1"

java - 这个解决方案可以优化吗?

c++ openssl加密有时会失败

php - 在哪里保存数字内容并防止共享?

go - 在 RSA 加密中为每次生成不同的 IV

php crypt() 河豚盐长度向后兼容