2009-11-19 7 views
-4

이 코드는 ArrayIndexOutOfBoundsException : 행에 있습니다. [] password = args [0] .toCharArray(); . 어떻게해야할까요?ArrayIndexOutOfBoundsException

package org.temp2.cod1; 
import java.security.*; 
import java.security.spec.InvalidKeySpecException; 
import java.security.spec.InvalidParameterSpecException; 
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, InvalidKeySpecException, InvalidParameterSpecException { 

    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); 
    } 


    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")); 


    } 
} 
+0

스택 추적을 게시하고 발생한 위치를 찾아야합니다. 그런 다음 그것이 잘못 된 곳을 즉시 알 수 있습니다. 그렇지 않은 경우 디버그에서 코드를 단계별로 실행하십시오. – Chii

+3

-1 약간의 노력을 보여주고 try catch에 랩핑하고 스택 추적을 살펴보고 printlns를 사방에 깔아서 어떤 commandexactly가 문제를 일으키는 지 알아 내려고 디버그 할 수 있습니다. – user44242

+1

그리고 신을 위해서, 전문가가 아니라면 자신의 암호 코드를 작성하지 마십시오. –

답변

4

실제로 두 개의 인수를 기본 메소드에 전달했는지 확인하거나 args [0]을 사용하여 첫 번째 메소드에 액세스하십시오. 두 번째 매개 변수의 최소 길이가 16 자인지 확인하십시오.

+0

그는'args [0]'을 사용하고 있습니다. 인수의 수를 확인하는 데 +1, – ChssPly76

+0

나중에 그는 args [1]도 사용합니다 ... – tanascius

1

당신은 무엇을해야 할 지 물었습니다. stacktrace를 확인하고 예외를 throw하는 행을 확인하십시오. 그리고 당신은 충분히 인수

0

이 코드는만큼 당신이 아무 인수로 호출과 같은 예외를 throw를 제공하고 있는지 확인 ...

public class Code2 { 
    public static void main(String[] args) { 
    string firstArgument = args[0]; 
    } 
} 

인수는 문자열 배열과에 전달되는 인수를 포함 귀하의 프로그램. args [0]을 사용하면 첫 번째 인수에 액세스하려고 시도하지만 첫 번째 인수는 없습니다 ...