java - genAESKeyFromPW() 但在 Java 中

标签 java coldfusion

我在 cflib.org 上使用 genAESKeyFromPW() 函数已经有一段时间了。我现在需要将其转换为直接的 Java。我已经四处询问过,但决定将其发布在这里,看看是否也能得到任何答案。

首先,看一下 genAESKeyFromPW()cflib.org .

我创建了以下 Java 代码进行测试。

String filename = new String("foo");
String salt = new String(Base64.encodeBase64(filename.getBytes()));
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
PBEKeySpec spec = new PBEKeySpec(filename.toCharArray(),salt.getBytes(), 1024,128);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
System.out.println(new String(Base64.encodeBase64(secret.getEncoded())));

Java 代码返回uJvByU+ArEvtsb+7E1mblw==

调用 genAESKeyFromPW('foo',tobase64('foo')) 返回 7ZX9TKD8WVULgTtbL/FN8w==

我知道可能存在字符编码问题。我尝试过将 UTF8 和其他格式添加到 getBytes(),但还没有找到在 CF 和 Straight Java 中返回相同值的方法。

如果有人能对此有所了解,我们将不胜感激。

最佳答案

尝试在两者中使用以下代码及其中的值:

    // The password
    String passwordString = "foo";

    // Base64 encoded random bytes used for the SALT.
    String saltString = "1234567890";

    char[] passwordChars = passwordString.toCharArray();
    byte[] saltBytes = Base64.decode(saltString);

    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    PBEKeySpec spec = new PBEKeySpec(passwordChars, saltBytes, 1024, 128);
    SecretKey secret = factory.generateSecret(spec);

    System.out.println(Base64.encodeBytes(secret.getEncoded()));

关于java - genAESKeyFromPW() 但在 Java 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16844638/

相关文章:

Java:有没有人有方法找到数组中字符串的最佳匹配?

Java如何有效地从列表中删除元素

java - 如何避免在基于 Java 的配置中注入(inject) Autowiring 依赖项时出现错误?

JQuery .load() 问题

Coldfusion 在加载时显示所有包含的文件

mysql - Coldfusion中如何对mysql数据库进行加密和使用

java - 将 float 组和浮点值复制到字节缓冲区 - Java

java - Android:如何为应用程序创建一组演示幻灯片,以便在用户第一次打开应用程序时向用户展示?

coldfusion - 是否需要更换 CFLogin 还是我遗漏了什么?

jquery - 使用jquery和coldfusion cffile上传多个文件