【发布时间】:2012-07-22 18:36:47
【问题描述】:
试图获得一个 PBKDF2 的 java 实现,我用它作为我的 C# 版本:https://github.com/shawnmclean/SimpleCrypto.net
我的代码:
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
public class PBKDF2 {
public static void main(String[] args) {
try {
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec ks = new PBEKeySpec("iamtwentycharacterss".toCharArray(),"50.eGIYr3ZpxpWw67utH17s/A==".getBytes(),50,64);
SecretKey s = f.generateSecret(ks);
Key k = new SecretKeySpec(s.getEncoded(),"HmacSHA1");
System.out.println(new String(k.getEncoded()));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
}
}
}
我在 stackoverflow 上尝试了各种答案:
Java - PBKDF2 with HMACSHA256 as the PRF
Password Verification with PBKDF2 in Java
不幸的是结果不匹配,结果应该是:
mOs/Mw7ZRM99i/BTJ+xnmj5Pm6QlqP1vuPqrf/Qa3WwassxI1QJ447OqdoBzunbJjvrx7+bHAO1Dnj8ltS4TKA==
【问题讨论】:
-
您的结果是 base64 编码的,但在您的程序中我没有看到任何 base 64 编码代码
-
好的,我已经使用 apache commons 库添加了 base 64 编码,但我仍然得到一个无效的结果。
标签: java security encryption pbkdf2