RC4算法

RC4是一种对称密码算法,它属于对称密码算法中的序列密码(streamcipher,也称为流密码),它是可变密钥长度,面向字节操作的流密码

RC4算法特点:(1)、算法简洁易于软件实现,加密速度快,安全性比较高;

(2)、密钥长度可变,一般用256个字节。

对称密码算法的工作方式有四种:电子密码本(ECB, electronic codebook)方式、密码分组链接(CBC, cipherblock chaining)方式、密文反馈(CFB, cipher-feedback)方式、输出反馈(OFB, output-feedback)方式。

RC4算法采用的是输出反馈工作方式,所以可以用一个短的密钥产生一个相对较长的密钥序列

OFB方式的最大的优点是消息如果发生错误(这里指的是消息的某一位发生了改变,而不是消息的某一位丢失),错误不会传递到产生的密钥序列上;缺点是对插入攻击很敏感,并且对同步的要求比较高。

步骤:1.  S、T初始化

2. 数据表S的初始置换

3. 密钥流生成   ---- 伪随机数生成方法(PGRA)

4. 加密    ---异或

5. 解密    ---异或

1、初始化S和T

for i=0 to 255 do

S[i]=i;

T[i]=K[ imod keylen ];

2、初始排列S

j=0;

for i=0 to 255 do

j= ( j+S[i]+T[i])mod256;

swap(S[i],S[j]);//循环执行完成后,数据表S被伪随机化;

3、产生密钥流

i,j=0;

for r=0 to len do  //r为明文长度,r字节

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];

import java.util.Scanner;
public class RC4 {public static void main(String[] args) {// TODO Auto-generated method stubcodebooksc c1 = new codebooksc();Scanner sc =new Scanner(System.in);System.out.println("密钥:");String k1 = sc.next();int m = k1.length();//密钥长度char K[] = new char[m];//密钥空间for(int i=0;i<m;i++){K[i] = k1.charAt(i);}Integer S[] = new Integer [256];//S表Integer T[] = new Integer [256];//T表c1.permutateS(S, T, K);//S表排序System.out.println("明文:");String p = sc.next();int n = p.length();char P[] = new char[n];//明文空间;for(int i=0;i<n;i++) {P[i]=p.charAt(i);}char keys[] = new char[n];//密钥流;c1.GenerateKeys(S, n,keys);//产生密钥流char C[] = new char[n];//密文空间;System.out.println();String ccc = c1.encrypt(keys, n, P,C);System.out.println("密文:");System.out.print(ccc);for(int i=0;i<n;i++){C[i] = ccc.charAt(i);}System.out.println();String pp =c1.decrypt( keys, n, C);System.out.println("明文是:");System.out.println(pp);}}
class codebooksc{public void permutateS(Integer S[],Integer T[],char K[]) {//初始排列S表;for(int i=0;i<256;i++) {S[i] = i;}int t[] = new int[256];for(int i=0;i<256;i++) {              t[i] = K[i%K.length ];T[i] = t[i];}int j=0;for(int i=0;i<255;i++){j = (j+S[i]+T[i])%256;int temp;         //交换S【i】与S【j】;temp = S[i];S[i] = S[j];S[j] = temp;}}public void GenerateKeys(Integer S[],int n,char keys[]) {//产生密钥流int i=0,j=0,r;for(int u=0;u<n;u++){i = (i+1)%256;j = (j+S[i])%256;          int temp;temp = S[i];S[i] = S[j];S[j] = temp;r = (S[i]+S[j])%256;keys[u] =(char) S[r].intValue(); }System.out.println("密钥流:");System.out.print(keys);}public String encrypt(char keys[],int n,char P[],char C[]) {//加密for(int i=0;i<n;i++){int op;op= P[i] ^ keys[i]; C[i] = (char)op;//System.out.println("op"+op);//System.out.println("C[i]"+C[i]);}String o4 = new String(C);return o4;}public String decrypt(char keys[],int n,char C[]) {//解密char D[] = new char[256];for(int i=0;i<n;i++){int op;op= C[i] ^ keys[i]; D[i] = (char)op;}String o4 = new String(D);return o4;
}
}

运行结果

JAVA实现RC4加密相关推荐

  1. java rc4_nodejs 和 java 进行 rc4 加密得到的结果不一样

    同时在对一个 buffer<03 01 00 00 02 00 00 00> 进行加密. java 和 c 得到的结果是 CA 66 C4 5D 90 E7 30 01 nodejs 得到 ...

  2. 基于JAVA的RC4加密解密算法循环实现

    RC4算法是一种对称加密算法,所谓对称加密,就是加密和解密的过程是一样的,加密和解密均采用同一把密钥.RC4算法的特点是算法简单,执行速度快安全性比较高并且密钥长度是可变的,可变范围为1-256字节( ...

  3. RC4加密解密java算法

    有一个项目,需要解析一个用户提供的rc4加密后的文件,特意搜索整理了一个java 版本的RC4加解密算法. public static String HloveyRC4(String aInput,S ...

  4. Java 实现手机号码的RC4加密、解密

    实现一个对手机号进行RC4加密,解密的udf函数. 1.RC4.java package com.zz.udf;import java.math.BigInteger;public class RC4 ...

  5. java rc4_java实现的RC4加密解密算法示例

    本文实例讲述了java实现的RC4加密解密算法.分享给大家供大家参考,具体如下: 有一个项目,需要解析一个用户提供的rc4加密后的文件,特意搜索整理了一个Java 版本的RC4加解密算法. publi ...

  6. java实现rc4密码_java实现RC4加密解密的实例教程

    这篇文章主要介绍了java实现的RC4加密解密算法,结合具体实例形式分析了java RC4加密解密算法的实现与使用技巧,需要的朋友可以参考下 本文实例讲述了java实现的RC4加密解密算法.分享给大家 ...

  7. 19 crypto-js RC4 加密的具体处理

    前言 这里主要是关于 RC4 加密的相关调研 之所以调研这个是因为之前存在一个问题, 调用 java 相关 api 进行 RC4 加密的结果 和调用 crypto-js 的结果不一样, 作为出发点开始 ...

  8. java设置pdf加密_如何使用Java对PDF进行加密,密码保护和设置受限权限

    java设置pdf加密 Today we will be looking at the document workhorse that is PDF, and how to programmatica ...

  9. java实现RC4加解密

    一.前言 在密码学中,RC4是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,因此也属于对称加密算法. 二.示例代码 import java.io.UnsupportedEncodingExce ...

最新文章

  1. boost spirit的简单使用
  2. 面试前必须要知道的Redis面试题
  3. Java web 开发的概念、环境配置、创建项目过程详解(Eclipse)
  4. 该文件没有与之关联的程序来执行该操作_Liunx tty子系统分析之三 tty字符设备文件操作接口说明...
  5. S5PV210 软件实现电阻屏两点触摸
  6. HDU 4081 Qin Shi Huang's National Road System
  7. 2021-2025年中国电弧火花发射光谱仪行业市场供需与战略研究报告
  8. 【JAVA错误笔记】 - 【Could not open ServletContext resource [/WEB-INF/applicationContext.xml]解决方法】
  9. spring学习---IOC--基于xml--bean管理--spring创建对象--spring注入属性--其他属性注入--外部bean--内部bean
  10. 基于J2EE的门诊挂号收费系统设计与实现.rar(毕业论文+程序源码+数据库文件)
  11. c语言不能正常输出128以上的ascii字符,C语言输出ASCII 219无法显示方格
  12. 语音文件怎么转换文字?这两个方法就能轻松解决。
  13. 集成AGC崩溃服务如何生成iOS符号文件表并上传
  14. keil更改黑色背景颜色
  15. 【YOLOV5-5.x 源码解读】google_utils.py
  16. SSAS Tabular
  17. Swin-Unet跑自己的数据集(Transformer用于语义分割)
  18. 保加利亚 乱码_保加利亚PHP的回顾-游戏开始!
  19. CAD制图怎么绘制对称的图形?
  20. H.266/VVC-VTM代码学习18-自适应QP设置(Adaptive QP)

热门文章

  1. splinter 页面元素判断API
  2. docker基本概述+部署(一)
  3. 2021牛客多校6K Starch Cat(点分治+猫树)
  4. html中文乱码 HTML5
  5. python fileinput_Python之fileinput模块学习
  6. 计算机主机是啥意思,boot是什么意思,教您电脑boot是什么
  7. 【自考】信息系统开发与管理
  8. Cassandra 集群核心配置和概梳理
  9. python爬取手机aop_用selenium+谷歌浏览器爬取美拍视频真实链接
  10. JS实现数学排列组合公式