原文传送门:http://www.hlovey.cn/2009/11/02/java-rc4.html
有一个项目,需要解析一个用户提供的rc4加密后的文件,特意搜索整理了一个java 版本的RC4加解密算法。
- publicstaticStringHloveyRC4(StringaInput,StringaKey)
- {
- int[]iS=newint[256];
- byte[]iK=newbyte[256];
- for(inti=0;i<256;i++)
- iS[i]=i;
- intj=1;
- for(shorti=0;i<256;i++)
- {
- iK[i]=(byte)aKey.charAt((i%aKey.length()));
- }
- j=0;
- for(inti=0;i<255;i++)
- {
- j=(j+iS[i]+iK[i])%256;
- inttemp=iS[i];
- iS[i]=iS[j];
- iS[j]=temp;
- }
- inti=0;
- j=0;
- char[]iInputChar=aInput.toCharArray();
- char[]iOutputChar=newchar[iInputChar.length];
- for(shortx=0;x<iInputChar.length;x++)
- {
- i=(i+1)%256;
- j=(j+iS[i])%256;
- inttemp=iS[i];
- iS[i]=iS[j];
- iS[j]=temp;
- intt=(iS[i]+(iS[j]%256))%256;
- intiY=iS[t];
- chariCY=(char)iY;
- iOutputChar[x]=(char)(iInputChar[x]^iCY);
- }
- returnnewString(iOutputChar);
- }
加密和解密都用这一个方法。也就是说参数String aInput 可以传一个明文,也可以传一个加密后的字符串,程序会自动的识别。然后执行加解密的响应操作。
使用例子如下:
- publicstaticvoidmain(String[]args){
- StringinputStr="做个好男人";
- Stringkey="abcdefg";
- Stringstr=HloveyRC4(inputStr,key);
- //打印加密后的字符串
- System.out.println(str);
- //打印解密后的字符串
- System.out.println(HloveyRC4(str,key));
- }