2013-11-27 104 views
0

我已经尝试了RC4加密和解密程序。我不断收到代码行s2=key.charAt(j++)的错误。
调试器告诉我,它不能从char改为int
输出一直运行直至进入密钥流。异或操作没有解决。
任何人都可以指出一个可能的解决方案?rc4在java中的加密和解密

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

有关转换为字符串使用UTF-8编码:

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

和一个字节数组:

str.getBytes("UTF-8"); 

,或者如果你不使用一个简单的编码像使用CharsetEncoder UTF-8。