日期:2014-05-20  浏览次数:20632 次

java实现RC4算法,出现乱码问题,如何解决?
Java code


public class Again {
    private String plaintext;
    private String ciphertext;
    byte[] K = {0,7,0,9,0,3,0,1,2,2};
    byte k;
    private int[] S;
    private int[] T;
    public Again(){
        S = new int[256];
        T = new int[256];
    }
    public void initST(){
        int size = this.K.length;
        for(int i = 0;i<256;i++){
            S[i] = i;
            T[i] = K[i % size];
        }    
    }
    public void permS(){
        int j = 0;
        for(int i = 0;i < 256;i++){
            j = (j + S[i] + T[i]) % 256;
            int temp;
            temp = S[j];
            S[j] = S[i];
            S[i] = temp;
        }
    }
    public void encryp(){
        int t,i = 0,j = 0;
        byte b[] = this.plaintext.getBytes();
        byte z[] = new byte[b.length];
        for(int m = 0;m < b.length; m++){
            i = (i + 1) % 256;
            j = (j + 1) % 256;
            int temp;
            temp = S[j];
            S[j] = S[i];
            S[i] = temp;
            t = (S[i] + S[j]) % 256;
            System.out.println();
            k = (byte) S[t];
            z[m] = (byte) ((byte)b[m]^k);
        }
        this.ciphertext = new String(z);
    }
    public static void main(String[] args){
        Again a = new Again();
        a.plaintext = "你们好啊";
        a.initST();
        a.permS();
        a.encryp();
        System.out.println(a.plaintext);
        System.out.println(a.ciphertext);
    }
}



此时console输出的密文是“溽笫萉”,
但是我把密文“溽笫萉”当做明文赋给a.plaintext 时,正确情况下应该输出“你们好啊”,
可是后台输出的是“你们好?”,不知道什么原因,输入其他汉字也大多是这样,解密过程不知道哪里除了问题,但是算法是和加密是一样的。

------解决方案--------------------
探讨

啊,怎么没人回答这个问题啊!?