RC4加密解密java算法

909 阅读1分钟

有一个项目,需要解析一个用户提供的rc4加密后的文件,特意搜索整理了一个java 版本的RC4加解密算法。

    public static String HloveyRC4(String aInput,String aKey)   
        {   
            int[] iS = new int[256];   
            byte[] iK = new byte[256];   
              
            for (int i=0;i<256;i++)   
                iS[i]=i;   
                  
            int j = 1;   
              
            for (short i= 0;i<256;i++)   
            {   
                iK[i]=(byte)aKey.charAt((i % aKey.length()));   
            }   
              
            j=0;   
              
            for (int i=0;i<255;i++)   
            {   
                j=(j+iS[i]+iK[i]) % 256;   
                int temp = iS[i];   
                iS[i]=iS[j];   
                iS[j]=temp;   
            }   
          
          
            int i=0;   
            j=0;   
            char[] iInputChar = aInput.toCharArray();   
            char[] iOutputChar = new char[iInputChar.length];   
            for(short x = 0;x<iInputChar.length;x++)   
            {   
                i = (i+1) % 256;   
                j = (j+iS[i]) % 256;   
                int temp = iS[i];   
                iS[i]=iS[j];   
                iS[j]=temp;   
                int t = (iS[i]+(iS[j] % 256)) % 256;   
                int iY = iS[t];   
                char iCY = (char)iY;   
                iOutputChar[x] =(char)( iInputChar[x] ^ iCY) ;      
            }   
              
            return new String(iOutputChar);   
                      
        }  


加密和解密都用这一个方法。也就是说参数String aInput 可以传一个明文,也可以传一个加密后的字符串,程序会自动的识别。然后执行加解密的响应操作。
使用例子如下:

    public static void main(String[] args) {      
        String inputStr = "做个好男人";      
        String key = "abcdefg";         
          
        String str = HloveyRC4(inputStr,key);  
          
        //打印加密后的字符串      
        System.out.println(str);    
          
        //打印解密后的字符串      
        System.out.println(HloveyRC4(str,key));    
    }   


\