网技091加密解密算法RC4罗雄Word格式.docx
- 文档编号:18022098
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:24
- 大小:654.38KB
网技091加密解密算法RC4罗雄Word格式.docx
《网技091加密解密算法RC4罗雄Word格式.docx》由会员分享,可在线阅读,更多相关《网技091加密解密算法RC4罗雄Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
n;
i++)
s=i;
j=0;
{
j=(j+s+k)%256;
swap(s,s[j]);
}
在初始化的进程中,密钥的要紧功能是将S-box搅乱,i确保S-box的每一个元素都得处处置,j保证S-box的搅乱是随机的。
而不同的S-box在通过伪随机子密码生成算法的处置后能够取得不同的子密钥序列,而且,该序列是随机的:
i=j=0;
while(明文未终止)
++i%=n;
j=(j+s)%n;
sub_k=s((s+s[j])%n);
取得的子密码sub_k用以和明文进行xor运算,取得密文,解密进程也完全相同。
RC4算法图解
2.2【问题描述】
咱们组设计的加密解密程序采纳RC4算法进行加密解密算法。
理由是由于RC4算法加密是采纳的xor,因此,一旦子密钥序列显现了重复,密文就有可能被破解。
关于如何破解xor加密,请参看BruceSchneier的AppliedCryptography一书的1.4节SimpleXOR,在此我就不细说了。
那么,RC4算法生成的子密钥序列是不是会显现重复呢?
通过我的测试,存在部份弱密钥,使得子密钥序列在不到100万字节内就发生了完全的重复,若是是部份重复,那么可能在不到10万字节内就能够发生重复,因此,推荐在利用RC4算法时,必需对加密密钥进行测试,判定其是不是为弱密钥。
而且,根据目前的分析结果,没有任何的分析对于密钥长度达到128位的RC4有效,所以,RC4是目前最安全的加密算法之一,大家可以放心使用!
2.2.2程序简介
本程序有四个文本域,别离为:
明文输入框、密钥输入框、子密钥流显示框、密文显示框。
设计有六个系统按钮,别离为:
加/解密、打开明文、打开密文、保留密文、退出、清空。
提供两大功能加密和解密。
2.3【大体要求】
2.3.1两大功能
v【加密功能】对文件加密时选择其单项选择按钮。
v【解密功能】对文件解密时选择其单项选择按钮。
2.3.2六大系统功能按钮
Ø
【加/解密】在已经选择加密或解密功能时,再点击此按钮。
对文件实现相应的加密或解密功能
【打开明文】点击此按钮能够导入要加密的文件到程序中。
【打开密文】点击此按钮能够导入要解密的文件到程序中。
【保留密文】点击此按钮能够保留已经加密的文件。
【退出】点击此按钮退出程序。
【清空】点击此按钮,能够清空四个文本域。
2.4【小组分工】
本程序设计大体能够分为文本域设计、按钮及其相关功能设计和RC4算法程序的设计三个部份,咱们小组安排如下:
✧汪梦云:
负责四个文本域模块的设计
✧黄花荭:
RC4算法程序模块的设计。
✧罗雄:
负责六大功能按钮及其相关功能和主方式模块的设计。
2.5【技术线路】
java语法基础
java的面向对象编程。
数组及注释的相关知识。
经常使用类及异样处置。
AWT组件及运用。
SWING组件及运用。
布局治理。
容器。
三、概要设计
3.1【菜单功能图】
3.2【加解密数据流图】
一层数据流图
二层数据流图
3.3【程序流程图】
四、要紧类概念
4.1【程序主体类概念】
//程序窗口主类;
===========================================================================
publicclassRC4FrameextendsJFrame{
//窗口的主容器板;
JPanelcp=(JPanel)getContentPane();
//按钮和单项选择器件所在的容器板;
JPanelopPanel=newJPanel();
//除Label之外的控件所在的容器板;
JPanelinfoPanel=newJPanel();
//Label所在的容器板;
JPaneltPanel0=newJPanel();
//对应四个文本域的转动容器板;
JScrollPanejsp0=newJScrollPane();
JScrollPanejsp1=newJScrollPane();
JScrollPanejsp2=newJScrollPane();
JScrollPanejsp3=newJScrollPane();
//四个文本域,
//别离为:
明文输入框,密钥输入框,子密钥流显示框,密文显示框;
JTextAreajta0=newJTextArea(20,11);
JTextAreajta1=newJTextArea(20,11);
JTextAreajta2=newJTextArea(20,11);
JTextAreajta3=newJTextArea(20,11);
//加密/解密模式选择的单项选择组件;
JRadioButtonjb1=newJRadioButton("
明文加密"
);
JRadioButtonjb2=newJRadioButton("
密文解密"
//功能按钮;
JButtonb1=newJButton("
加/解密"
JButtonb2=newJButton("
打开明文"
JButtonb3=newJButton("
打开密文"
JButtonb4=newJButton("
保留密文"
JButtonb5=newJButton("
退出"
JButtonb6=newJButton("
清空"
ButtonGroupbg=newButtonGroup();
//RC4加解密类的对象;
RC4Cryptrc4;
//保留密文结果的byte数组;
byte[]result;
//保留/打开对话框;
JFileChooserjfc=newJFileChooser();
4.2【我负责的要紧模块】
4.2.1面板与类变量的初始化
publicRC4Frame(){
setSize(640,450);
setVisible(true);
setResizable(false);
setTitle("
RC4流密码加\\解密程序V2.0:
"
setDefaultCloseOperation(EXIT_ON_CLOSE);
//将文本域填入转动容器板;
jsp0.getViewport().add(jta0);
jsp1.getViewport().add(jta1);
jsp2.getViewport().add(jta2);
jsp3.getViewport().add(jta3);
//将子密钥框和秘文框设置为不可编辑;
jta2.setEditable(false);
jta3.setEditable(false);
//为文本域添加自动换行功能;
jta0.setLineWrap(true);
jta1.setLineWrap(true);
jta2.setLineWrap(true);
jta3.setLineWrap(true);
//初始化Lablel的版面;
tPanel0.setLayout(newGridLayout(1,5));
tPanel0.add(newJLabel("
明文输入框:
"
));
密钥输入框:
子密码流显示:
密文码显示:
tPanel0.setSize(600,20);
//初始化程序的功能组件版面;
infoPanel.setLayout(newGridLayout(1,4));
infoPanel.add(jsp0);
infoPanel.add(jsp1);
infoPanel.add(jsp2);
infoPanel.add(jsp3);
//初始化程序母板面;
cp.setLayout(newFlowLayout());
cp.add(opPanel);
cp.add(tPanel0);
cp.add(infoPanel);
//初始化程序操纵组件版面;
opPanel.setLayout(newGridLayout(2,6));
opPanel.add(newJLabel("
opPanel.add(newJLabel("
opPanel.add(jb1);
opPanel.add(jb2);
opPanel.add(b1);
opPanel.add(b2);
opPanel.add(b3);
opPanel.add(b4);
opPanel.add(b5);
opPanel.add(b6);
bg.add(jb1);
bg.add(jb2);
jb1.setSelected(true);
//为操纵按钮添加监听器;
b1.addActionListener(newB1_actionAdapter(this));
b2.addActionListener(newB2_actionAdapter(this));
b3.addActionListener(newB3_actionAdapter(this));
b4.addActionListener(newB4_actionAdapter(this));
b5.addActionListener(newB5_actionAdapter(this));
b6.addActionListener(newB6_actionAdapter(this));
4.2.2功能按钮的监听器的方式
//打开明文文本按钮的监听器方式;
********************************************
protectedvoidb2_actionPerformed(ActionEvente){
//将打开的明文文本内容列出;
jta0.setText(openTextFile());
}
//打开保留过的密文数据文件按钮监听器方式;
**********************************
protectedvoidb3_actionPerformed(ActionEvente){
//打开秘文文件的方式;
openResultFile();
//保留密文结果文件按钮监听器方式;
******************************************
protectedvoidb4_actionPerformed(ActionEvente){
//保留密文结果文件的方式;
saveResultFile();
//退出按钮监听器方式;
******************************************************
protectedvoidb5_actionPerformed(ActionEvente){
System.exit(0);
//清空按钮监听器方式;
protectedvoidb6_actionPerformed(ActionEvente){
jta0.setText("
jta1.setText("
jta2.setText("
jta3.setText("
result=null;
rc4=null;
}
4.2.3各按钮的监听器的实例模板类
//各按钮的监听器的实例模板类;
===========================================================
classB1_actionAdapterimplementsActionListener{
privateRC4Frameadaptee;
B1_actionAdapter(RC4Frameadaptee){
this.adaptee=adaptee;
publicvoidactionPerformed(ActionEvente){
adaptee.b1_actionPerformed(e);
classB2_actionAdapterimplementsActionListener{
B2_actionAdapter(RC4Frameadaptee){
adaptee.b2_actionPerformed(e);
classB3_actionAdapterimplementsActionListener{
B3_actionAdapter(RC4Frameadaptee){
adaptee.b3_actionPerformed(e);
classB4_actionAdapterimplementsActionListener{
B4_actionAdapter(RC4Frameadaptee){
adaptee.b4_actionPerformed(e);
classB5_actionAdapterimplementsActionListener{
B5_actionAdapter(RC4Frameadaptee){
adaptee.b5_actionPerformed(e);
classB6_actionAdapterimplementsActionListener{
B6_actionAdapter(RC4Frameadaptee){
adaptee.b6_actionPerformed(e);
4.2.4文件导入和导出的模块
//从.txt文件中读取文本内容的方式;
privateStringopenTextFile(){
Stringmessage="
;
//显示文件打开对话框;
if(JFileChooser.APPROVE_OPTION==jfc.showOpenDialog(this)){
try{
//确信要读取文件的文件名;
Stringfilename1=jfc.getSelectedFile().getPath();
//成立以此文件名为目标的文件对象;
Filefile=newFile(filename1);
//确信文件大小,单位字节;
intsize=(int)file.length();
//成立存储从文件读出内容的字符数组;
char[]data=newchar[size];
//成立文件读取对象;
FileReaderin=newFileReader(file);
intreadChar=0;
//按字符逐个从文件读取字符,存入data;
while(in.ready()){
readChar=readChar+
in.read(data,readChar,size-readChar);
//关闭文件读取对象;
in.close();
//将字符数组改成字符串;
message=newString(data,0,readChar);
}catch(Exceptione){
message=e.getMessage();
returnmessage;
//从密文结果文件中读取数据内容的方式;
**************************************
privateStringopenResultFile(){
//显示本文件的字节数;
jta3.setText("
共有"
+size+"
字节\n"
bytetemp=(byte)0;
//从头成立一个容量等于文件大小的byte数组,并以此来更新result;
result=newbyte[size];
//成立标准数据类型的文件读取流对象;
DataInputStreamin=newDataInputStream(newFileInputStream(file));
//逐个字节读取文件中的数据并存在result;
for(inti=0;
i<
size;
i++){
temp=in.readByte();
jta3.append("
字节"
+(i+1)+"
:
+temp+"
\n"
result[i]=temp;
//关闭读取流;
//将密文结果存入结果文件的方式;
privateStringsaveResultFile(){
//保留条件:
result已被初始化;
if((resultinstanceofbyte[])&
&
//显示文件保留对话框;
(JFileChooser.APPROVE_OPTION==jfc.showSaveDialog(this))){
//成立标准数据类型的文件输出流对象;
DataOutputStreamout=newDataOutputStream(newFileOutputStream(file));
//逐个字节将resunlt内容写入文件;
result.length;
out.writeByte(result[i]);
//关闭文件输出流对象;
out.close();
五、用户利用说明
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网技 091 加密 解密 算法 RC4 罗雄