Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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
Java AES加密-密码,salt未解析?_Java_Encryption_Aes - Fatal编程技术网

Java AES加密-密码,salt未解析?

Java AES加密-密码,salt未解析?,java,encryption,aes,Java,Encryption,Aes,我收到错误“密码,未解析”。有什么建议吗 package org.temp2.cod1; import java.security.*; import java.security.spec.KeySpec; import javax.crypto.*; import javax.crypto.spec.*; import java.io.*; public class Code2 { public static void main(String[] args) throws NoSuchA

我收到错误“密码,未解析”。有什么建议吗

package org.temp2.cod1;
import java.security.*;
import java.security.spec.KeySpec;

import javax.crypto.*;
import javax.crypto.spec.*;
import java.io.*;

public class Code2 {

public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    KeySpec spec = new PBEKeySpec(password, salt, 1024, 256);
    SecretKey tmp = factory.generateSecret(spec);
    SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, secret);
    AlgorithmParameters params = cipher.getParameters();
    byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
    byte[] ciphertext = cipher.doFinal("Hello, World!".getBytes("UTF-8"));


    }
}

声明并初始化
salt
password
变量

例如,如果在启动程序时将密码和salt(16位十六进制数)作为前两个参数传递给程序,则可能如下所示:

char[] password = args[0].toCharArray();
byte[] salt = new byte[8];
for (int i = 0; i < 8; ++i) {
  salt[i] = (byte) Integer.parseInt(args[1].substring(i * 2, i * 2 + 2), 16);
}
char[]password=args[0].tocharray();
字节[]salt=新字节[8];
对于(int i=0;i<8;++i){
salt[i]=(字节)整数.parseInt(args[1].子字符串(i*2,i*2+2),16);
}
密码学本身是极其困难的。试图同时熟悉它和一门新语言只会使问题更加复杂