1. 程式人生 > >RC4加密解密java演算法

RC4加密解密java演算法

有一個專案,需要解析一個使用者提供的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));    
    }