2013-11-27 4 views
0

RC4 암호화 및 암호 해독 절차에 대한 작업을 시도했습니다. 코드 줄 s2=key.charAt(j++)에 오류가 계속 발생합니다.
디버거에서 문자부터 까지에서 해결할 수 없다고 알려줍니다.
출력이 키 스트림에 입력 될 때까지 실행됩니다. XOR 작업이 제대로 작동하지 않습니다.
가능한 해결책을 제시 할 수 있습니까?rc4 암호화 및 암호 해독

import java.util.Scanner; 

public class Rc4 
{ 

//global 
public static int SIZE=256; 



    public static int[] s1 = new int[SIZE+1]; //filled with random numbers 
    public static int[] s2 = new int[SIZE+1]; //filled with keytext 
    public static int i,j; 
    public static String key, input; 
    public static void main(String[] args) 
    { 
      Scanner keyboard= new Scanner(System.in); 
      System.out.print("En/Decrypt:"); 
      input = keyboard.nextLine(); 
      System.out.print("Enter key :"); 
      key = keyboard.nextLine(); 
      INIT(); 
      KSA(); 
     } 
    static void INIT() 
    { 
      j=0; 
      for(i=0; i<SIZE; i++) 
      {   
       if(j==key.length()) 
       j=0; 
       s2= key.charAt(j++); 
      } 

    } 
    static void KSA() 
    { 
     for(i=0; i<SIZE; i++) 
      s1[i]=i; 
      j=0; 
      for(int i=0; i<SIZE; i++) 
      { 
       j = (j + s1[i] + s2[i]) % SIZE; 
       swap(i, j); 
      } 
    } 
    static void PRGA() 
    { 
     int Rand=0; 
     //print(); 
     j=i=0; 
     for(int x = 0; x< input.length(); x++) 
     { 
       i = (i + 1) % SIZE; 
       j = (j + s1[i]) % SIZE; 
       swap(i, j); 
       Rand = (char)s1[ ((s1[i] + s1[j]) % SIZE)]; 
       System.out.print((char)(input.charAt(x)^Rand)); 
     } 

    } 
    static void print() 
    {  
     System.out.print("\n"); 
     for(int y=0; y<input.length(); y++) 
      { 
       System.out.print(input.charAt(y)); 
      } 
       System.out.print("\n"); 
    } 
    static void swap(int i, int j) 
    { 
      int temp = s1[i]; 
      s1[i]= s1[j]; 
      s1[j] = temp; 

    } 
} 

답변

0

RC4는 바이트 지향 알고리즘입니다. Java 문자는 바이트가 아닙니다. 그러나 필요에 따라 문자열을 바이트 배열로 변환하거나 변환 할 수 있습니다. 내 구현 here을 사용해 주셔도됩니다.

new String(bytes, "UTF-8"); 

및 바이트 배열 : 간단한 인코딩 등을 사용하지 않는 경우

str.getBytes("UTF-8"); 

또는이 CharsetEncoder를 사용하는 UTF-8 인코딩 문자열로 변환

UTF-8.