Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PBKDF2,来自C的Java实现#_Java_Security_Encryption_Pbkdf2 - Fatal编程技术网

PBKDF2,来自C的Java实现#

PBKDF2,来自C的Java实现#,java,security,encryption,pbkdf2,Java,Security,Encryption,Pbkdf2,为了获得PBKDF2的java实现,我将其用作我的C#版本: 我的代码: 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.Se

为了获得PBKDF2的java实现,我将其用作我的C#版本:

我的代码:

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上尝试了各种答案:

不幸的是,结果不匹配,结果应该是:
mOs/Mw7ZRM99i/BTJ+xnmj5pm6qlqp1vupkrf/Qa3WwassxI1QJ447OqdoBzunbJjvrx7+bHAO1Dnj8ltS4TKA=

如果可能有帮助,我已经用以下代码解决了我的问题,Rfc2898DeriveBytes类:


我错过了这一点

程序中所需的密钥长度为64,但预期结果的密钥长度为512。将pbekeyspec中所需的密钥长度更改为512

KeySpec ks = new PBEKeySpec("iamtwentycharacterss".toCharArray(),"50.eGIYr3ZpxpWw67utH17s/A==".getBytes(),50,512);

您的结果是base64编码的,但在您的程序中,我没有看到任何base64编码代码好的,我使用apache commons库添加了base64编码,但仍然得到一个无效的结果。
KeySpec ks = new PBEKeySpec("iamtwentycharacterss".toCharArray(),"50.eGIYr3ZpxpWw67utH17s/A==".getBytes(),50,512);