2009-11-19 4 views
0

"암호, 해결되지 않음"오류가 발생합니다. 어떤 제안?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 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")); 


    } 
} 

답변

1

선언은 saltpassword와 변수를 초기화한다. 이 프로그램에 대한 첫 번째 두 개의 인수로 (16 자리의 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); 
} 

암호화를 그 자체로 극히 어렵습니다. 에 익숙해 지려고하면 새로운 언어가 문제를 복잡하게 만듭니다.