基于B S的RC4算法的加密与解密程序.docx
《基于B S的RC4算法的加密与解密程序.docx》由会员分享,可在线阅读,更多相关《基于B S的RC4算法的加密与解密程序.docx(13页珍藏版)》请在冰点文库上搜索。
基于BS的RC4算法的加密与解密程序
基于B/S的RC4算法的加密与解密程序
第一部分使用说明2
1.环境需求3
1.1硬件要求3
1.2软件要求3
2.软件的安装和环境设置3
2.1MyEclipse8.6的安装与配置3
2.2Tomcat6.0服务器的安装与配置3
2.2.1安装3
2.2.2配置3
2.3JDK的安装和Java环境配置4
2.3.1配置4
3.程序使用说明5
3.1程序使用步骤5
3.2结果显示6
第二部分设计说明7
1.引言7
1.1背景7
1.2算法核心7
1.2.1基本概念说明7
1.2.2程序流程图8
2.算法设计8
2.1密钥的生成与加密解密过程8
2.1.1初始化S-box,并用T置乱S8
2.1.1密钥的生成9
2.1.3加密与解密9
2.2界面设计9
2.3Servlet框架11
3.总结11
第一部分使用说明
1.环境需求
1.1硬件要求
实际使用最低配置要求:
CPU:
IntelPremium2450MHz
内存:
128MB
硬盘空间:
4GB
注:
实际的要求因系统的配置和选择安装的应用程序和功能的不同而各异。
1.2软件要求
MyEclipse8.6:
本程序需要用到MyEclipse8.6进行java编程,通过java算法实现核心算法,同时MyEclipse8.6中可以直接实现JSP界面生成等。
Tomcat6.0:
MyEclipse8.6中需要Tomcat6.0服务器的链接。
JDK:
同时需要安装JDK
浏览器:
最后结果显示
Servlet:
基本框架
2.软件的安装和环境设置
2.1MyEclipse8.6的安装与配置
直接通过myeclipse-8.6.1-win32.exe,并根据安装向导进行安装,待tomcat服务器及jdk安装后再进行具体环境配置。
2.2Tomcat6.0服务器的安装与配置
2.2.1安装
若下载的为ZIP压缩文件型,则可以直接解压到文件夹中;若是安装文件型,则执行相应的安装文件,并选择合适的路径安装。
2.2.2配置
在进行安装tomcat完毕后,windows的选项中进入preference,之后preference->myeclipse->servers->tomcat进行配置。
之后在使用时候再在MyEclipse中新建所作项目chenlei时候ADDtomcat服务器。
2.3JDK的安装和Java环境配置
2.3.1配置
安装了JDK后,进行环境变量的配置,主要由三部分:
JAVA_HOME,PATH,CLASSPATH。
右键选择“我的电脑”,选择【属性】,在出现的系统设置的窗口中,选择“高级系统设置”→“环境变量”→“系统变量”→“新建”
JAVA_HOME配置:
PATH的配置:
CLASSPATH的配置:
3.程序使用说明
3.1程序使用步骤
打开文件夹“0909030444陈蕾”,再打开“程序代码”文件夹,找到其中WebRoot文件夹。
打开tomcat所在的安装目录下的webapps,如E:
\tomcat\apache-tomcat-6.0.30\webapps。
并将WebRoot文件夹复制到webapps文件夹下。
在
3.2结果显示
再在浏览器中打开http:
//localhost:
8080/chenlei/home.jsp,进行加密解密尝试。
第二部分设计说明
1.引言
1.1背景
RC4加密算法是大名鼎鼎的RSA三人组中的头号人物RonRivest在1987年设计的密钥长度可变的流加密算法簇。
之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。
该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。
RC4起初是用于保护商业机密的。
但是在1994年9月,它的算法被发布在互联网上,也就不再有什么商业机密了。
在今天,RC4算法是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码,只有经过授权(缴纳相应费用)的用户才能享受该服务。
1.2算法核心
RC4算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。
假设S-box长度和密钥长度均为为n。
首先是初始化S-box,在有产生的临时矢量T对S进行置乱,进入密钥生成阶段。
得到的密钥用以和明文进行异或(xor)运算,得到密文,解密过程也完全相同。
算法简单高效,安全性较高。
1.2.1基本概念说明
S-box:
256bytes,8*8的S盒,在程序算法实现中是一个状态矢量S,S[0],S[1],S[2],....,S[255]。
所有项都是数字。
密钥K:
长度为1-256bytes(8-1024bits)。
临时矢量T:
一个256个字节的数组。
用密匙填充该数组,不断重复密匙。
异或运算:
异或(xor)是一个数学运算符。
它应用于逻辑运算。
异或符号为“^”。
RC4算法运用的是:
P⊕K⊕K=P
明文:
plaintext
密文:
ciphertext
1.2.2程序流程图
2.算法设计
2.1密钥的生成与加密解密过程
2.1.1初始化S-box,并用T置乱S
在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。
部分Java代码:
publicStringencrypt(Stringplaintext){
Stringciphertext=newString();
intS[]=newint[256];//状态矢量S
intT[]=newint[256];//临时矢量T
//初始化状态矢量S,同时生成临时矢量T
for(inti=0;i<256;i++){
S[i]=i;
T[i]=K[i%K.length];//将密钥K存入T中
}
//用T置乱S
{
intj=0;
for(inti=0;i<256;i++){
j=(j+(int)S[i]+(int)T[i])%256;
swap(S[i],S[j]);
}
}
2.1.1密钥的生成
不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,并且,该序列是随机的:
部分Java代码:
inti=0,j=0;
intc=0;
intt;
bytek;//密钥流的当前字节
byteP[]=plaintext.getBytes();
byteC[]=newbyte[P.length];
while(c
i=(i+1)%256;
j=(j+S[i])%256;
swap(S[i],S[j]);
t=((S[i]+S[j])%256);
k=(byte)S[t];
}
2.1.3加密与解密
得到的密钥k用以和明文进行异或运算,得到密文,解密过程也完全相同。
部分Java代码:
(接上一步)
C[c]=(byte)(k^P[c]);
System.out.print(C[c]+"");
c++;
}
System.out.println(newString(C));
ciphertext=newString(C);
returnciphertext;
}
2.2界面设计
界面设计简洁,主要由三个文本输入框,并相应设置两个href的链接,相当于两个按钮,用户可以点击“加密”“解密”实现加密解密。
当用输入一段明文,并点击“加密”(或“解密”),
请输入一句话:
void(0)"onclick="javascript:
doencrypt();returnfalse;">加密
此时调用doencrypt()
functiondoencrypt(){
document.form1.domethod.value="encrypt";
document.form1.submit();
}
functiondodecipher(){
document.form1.domethod.value="decipher";
document.form1.submit();
}
提交并将参数传递给Severlet
由Severlet中经过Java算法解密或加密后的结果,返回页面,由页面显示。
<%Stringcipher=(String)request.getAttribute("cipher");
if(cipher==null){
cipher="";
}
Stringplain1=(String)request.getAttribute("plain1");
if(plain1==null){
plain1="";
}
%>
所得密文:
"/>
void(0)"onclick="javascript:
dodecipher();returnfalse;">解密
所得明文:
"/>
该算法程序还存在很多值得改进之处,还不够完善,比如还不能进行文件的加密,也许还存在一些不能正常加密的情况,但是在整个编程过程中,对于知识的贯通性,思维的缜密性等都得到了锻炼,可以说是一次虽不完善但是体验良多的编程经历,收获良多。