RC4加密算法实现
来源:互联网 发布:美利达怎么样知乎 编辑:程序博客网 时间:2024/06/13 19:36
原理
RC4产生一个伪随机比特流,加密的时候把它跟明文进行异或处理得到密文,解密的时候将密文与产生的流再次异或得到明文。
主要过程为以下三大步:
1、初始化S和T
for i=0 to 255 do
S[i]=i;
T[i]=K[ i mod keylen ];
2、初始排列S
j=0;
for i=0 to 255 do
j= ( j+S[i]+T[i])mod256;
swap(S[i],S[j]);
3、产生密钥流
i,j=0;
for r=0 to len do //len为明文长度
i=(i+1) mod 256;
j=(j+S[i])mod 256;
swap(S[i],S[j]);
t=(S[i]+S[j])mod 256;
k[r]=S[t];
java实现
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Scanner;public class RC4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String plaintext = new String(); //明文 String ciphertest = new String(); //密文 String key = "123"; //秘钥 int[] s = new int[256]; Init_rc4(s, key); //初始化 int[] s2 = new int[256]; for(int i = 0; i < 256; i++){//保存初始值 s2[i] = s[i]; } while(scanner.hasNext()) { if("RC4 -enc".equals(scanner.nextLine())){ //读取明文 plaintext = ReadText2String(new File("src/com/hp/rc4/plaintext.txt")); System.out.println("读入的明文是:\n" + plaintext); ciphertest = Encry_code_rc4(s, plaintext, key); //将密文写入文件 WriteText2String(ciphertest, new File("src/com/hp/rc4/ciphertext.txt")); System.out.println("加密后的密文是:\n" + ciphertest); } if("RC4 -dec".equals(scanner.nextLine())){ //读取密文 ciphertest = ReadText2String(new File("src/com/hp/rc4/ciphertext.txt")); System.out.println("读入的密文是:\n" + ciphertest); plaintext = Encry_code_rc4(s2, ciphertest, key); //解密 //将明文写入文件 WriteText2String(plaintext, new File("src/com/hp/rc4/plaintext.txt")); System.out.println("解密后的明文是:\n" + plaintext); } } } public static void WriteText2String(String output, File file) { try { FileOutputStream fout = new FileOutputStream(file); OutputStreamWriter out = new OutputStreamWriter(fout, "utf-8"); out.write(output); out.close(); } catch (Exception e) { e.printStackTrace(); } } public static String ReadText2String(File file){ StringBuilder result = new StringBuilder(); try{ FileInputStream fin = new FileInputStream(file); InputStreamReader input = new InputStreamReader(fin, "utf-8"); int content = 0; while((content = input.read())!=-1){ result.append((char)content); } input.close(); }catch(Exception e){ e.printStackTrace(); } return result.toString(); } private static void Init_rc4(int[] s, String key) { byte[] k = new byte[256]; //初始化 for(int i = 0; i < 256; i++){ s[i] = i; k[i] = (byte)key.charAt(i % key.length()); } //s的初始置换 int j = 0; for(int i = 0; i < 256; i++){ j = (j + s[i] + k[i]) % 256; int temp = s[i]; s[i] = s[j]; s[j] = temp; } } private static String Encry_code_rc4(int[] s, String input, String key) { char[] input_char = input.toCharArray(); char[] output_char = new char[input_char.length]; int i = 0, j = 0; for(int k = 0; k < input_char.length; k++){ i = (i + 1) % 256; j = (j + s[i]) % 256; int temp = s[i]; s[i] = s[j]; s[j] = temp; int t = (s[i] + s[j]) % 256; //加密时:将s[t]与明文相应的字节异或产生密文 //解密时:将s[t]与密文相应的字节异或恢复明文 output_char[k] = (char) (input_char[k] ^ (char)s[t]); } return new String(output_char); }}
结果
阅读全文
0 0
- RC4加密算法及其实现
- RC4加密算法实现
- RC4加密算法及其scala实现
- RC4加密算法
- rc4加密算法
- RC4加密算法
- RC4加密算法
- RC4加密算法
- rc4加密算法
- RC4加密算法
- RC4加密算法在C++中的实现
- RC4加密算法在C++中的实现(转)
- RC4加密算法在C#中的实现
- RC4加密算法在C++中的实现
- 用 Objective-C 实现的 Rc4 加密算法
- 用 Java 实现的 Rc4 加密算法
- RC4加密算法在C#中的实现
- RC4加密算法在C++中的实现
- [设计]享元模式
- rabbitmq 启动报错
- 《DOS命令一日通》目 录
- [设计]外观模式
- python: map函数
- RC4加密算法实现
- mysql 自动补全工具 mycli
- MongoDB中ObjectId生成规则参考
- 电脑端最良心的软件有哪些
- JZOJ1276 护花(贪心)
- uva 1394
- 1701H2 王建瑜 连续第十一天
- pyCharm License server 激活
- Unix-Linux编程实践教程——第八章