网络安全课设基于JAVA的保密柜系统设计与实现.doc_第1页
网络安全课设基于JAVA的保密柜系统设计与实现.doc_第2页
网络安全课设基于JAVA的保密柜系统设计与实现.doc_第3页
网络安全课设基于JAVA的保密柜系统设计与实现.doc_第4页
网络安全课设基于JAVA的保密柜系统设计与实现.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录 一、项目背景3二、 DES算法原理32.1加密42.2加密过程实现82.2.1IP置换82.2.2迭代82.4子密钥的生成112.5解密12三、系统程序设计与实现133.1程序设计步骤133.1.1程序开发平台及工具133.1.2源代码13四、系统测试19五、总结20基于JAVA的文件保密柜系统设计与实现一、项目背景随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在1997年,美国国家标准局公布实施了“美国数据加密标准 (DES)”,民间力量开始全面介入密码学的研究和应用中,采用的加密算法有DES、RSA、SHA等。随着对加密强度需求的不断提高,近期又出现了AES、ECC等。我国也相应提出了自己国家的ECC、SCB2、SCH等加密算法。随着计算机和通信网络的广泛应用,信息的安全性已经受到人们的普遍重视。信息安全已不仅仅局限于政治,军事以及外交领域,而且现在也与人们的日常生活息息相关。现在,密码学理论和技术已得到了迅速的发展,它是信息科学和技术中的一个重要研究领域。在近代密码学上值得一提的大事有两件:一是1977年美国国家标准局正式公布实施了美国的数据加密标准(DES),公开它的加密算法,并批准用于非机密单位及商业上的保密通信。密码学的神秘面纱从此被揭开。二是Diffie和Hellman联合写的一篇文章“密码学的新方向”,提出了适应网络上保密通信的公钥密码思想,拉开了公钥密码研究的序幕。DES(Data Encryption Standard)是IBM公司于上世纪1977年提出的一种数据加密算法。在过去近三十年的应用中,还无法将这种加密算法完全、彻底地破解掉。而且这种算法的加解密过程非常快,至今仍被广泛应用,被公认为安全的。虽然近年来由于硬件技术的飞速发展,破解DES已经不是一件难事,但学者们似乎不甘心让这样一个优秀的加密算法从此废弃不用,于是在DES的基础上有开发了双重DES(DoubleDES,DDES)和三重DES(Triple DES,TDES)。在国内,随着三金工程尤其是金卡工程的启动,DES 算法在POS、ATM、磁卡及智能卡(IC 卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN 码加密传输,IC 卡与POS 间的双向认证、金融交易数据包的MAC 校验等,均用到DES 算法。DES加密体制是ISO颁布的数据加密标准。二、 DES算法原理 DES算法由加密、子密钥和解密的生成三部分组成。现将DES算法介绍如下。2.1加密DES算法处理的数据对象是一组64比特的明文串。设该明文串为m=m1m2m64 (mi=0或1)。明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。其加密过程图示如下:图2-1:DES算法加密过程对DES算法加密过程图示的说明如下:待加密的64比特明文串m,经过IP置换(初始置换)后,得到的比特串的下标列表如下:表2-1:得到的比特串的下标列表IP58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157该比特串被分为32位的L0和32位的R0两部分。R0子密钥K1(子密钥的生成将在后面讲)经过变换f(R0,K1)(f变换将在下面讲)输出32位的比特串f1,f1与L0做不进位的二进制加法运算。运算规则为:f1与L0做不进位的二进制加法运算后的结果赋给R1,R0则原封不动的赋给L1。L1与R0又做与以上完全相同的运算,生成L2,R2 一共经过16次运算。最后生成R16和L16。其中R16为L15与f(R15,K16)做不进位二进制加法运算的结果,L16是R15的直接赋值。R16与L16合并成64位的比特串。值得注意的是R16一定要排在L16前面。R16与L16合并后成的比特串,经过置换IP-1(终结置换)后所得比特串的下标列表如下:表2-2:置换后所得比特串的下标列表IP-1408481656246432397471555236331386461454226230375451353216129436444125220602835343115119592734242105018582633141949175725经过置换IP-1后生成的比特串就是密文e。变换f(Ri-1,Ki):它的功能是将32比特的输入再转化为32比特的输出。其过程如图2-2所示:图2-2:将32比特的输入再转化为32比特的输出 f变换说明:输入Ri-1(32比特)经过变换E(扩展置换E)后,膨胀为48比特。膨胀后的比特串的下标列表如下:表2-3:膨胀后的比特串的下标列表E:3212345456789891011121312131415161716171819202120212223242524252627282928293031321膨胀后的比特串分为8组,每组6比特。各组经过各自的S盒后,又变为4比特(具体过程见后),合并后又成为32比特。该32比特经过P变换(压缩置换P)后,其下标列表如下:表2-4:压缩置换P后的下标列表4P:1672021291228171152326518311028241432273919133062211425经过P变换后输出的比特串才是32比特的f(Ri-1,Ki).在其输入b1,b2,b3,b4,b5,b6中,计算出x=b1*2+b6, y=b5+b4*2+b3*4+b2*8,再从Si表中查出x 行,y 列的值Sxy。将Sxy化为二进制,即得Si盒的输出。(S表如图2-4所示)图2-42.2加密过程实现2.2.1IP置换for (i = 0; i 64; i+) Mi = timeDataIPi - 1;2.2.2迭代首先进行S盒的运算。输入32位比特串, 经过E变换,由32位变为48位:for (i = 0; i 48; i+) REi = R0Ei - 1;与keyarraytimesi按位作不进位加法运:REi = REi + keyarraytimesi; if (REi = 2) REi = 0; 48位分成8组: for(i=0;i8;i+) for(j=0;j6;j+) Sij=RE(i*6)+j; 经过S盒,得到8个数:sBoxDatai = S_Boxi(Si0 1) + Si5(Si1 3)+ (Si2 2) + (Si3 1) + Si4;将8个数变换输出二进制:for (j = 0; j 4; j+) sValue(i * 4) + 3) - j = sBoxDatai % 2;sBoxDatai = sBoxDatai / 2;经过P变换:RPi = sValuePi - 1;至此,S盒运算完成左右交换:L1i = R0i;R1i = L0i + RPi;Ri为Li-1与f(R,K)进行不进位二进制加法运算结果:R1i = L0i + RPi;if (R1i = 2) R1i = 0;各次迭代类似,可以依此类推。2.3子密钥的生成64比特的密钥生成16个48比特的子密钥。其生成过程见图2-5:图2-5子密钥生成过程具体解释如下:64比特的密钥K,经过PC-1(置换A)后,生成56比特的串。其下标如表所示:表2-5:生成56比特的串PC-157494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124该比特串分为长度相等的比特串C0和D0。然后C0和D0分别循环左移1位,得到C1和D1。C1和D1合并起来生成C1D1。C1D1经过PC-2(置换B)变换后即生成48比特的K1。K1的下标列表为:表2-6:K1的下标列表PC-21417112415328156211023191242681672720132415231374755304051453348444939563453464250362932C1、D1分别循环左移LS2位,再合并,经过PC-2,生成子密钥K2依次类推直至生成子密钥K16。注意:Lsi (I =1,2,.16)的数值是不同的。具体见下表:表2-7:生成子密钥迭代顺序12345678910111213141516左移位数11222222122222212.4子密钥的生成: 输入64位K,经过PC-1变为56位:for (i = 0; i 56; i+) K0i = keyPC_1i - 1;56位的K0,均分为28位的C0,D0。C0,D0生成K1和C1,D1(以下几次迭代方法相同,仅以生成任意一次为例): if (offset = 1) for (i = 0; i 27; i+) / 循环左移一位 c1i = c0i + 1; d1i = d0i + 1; c127 = c00; d127 = d00; else if (offset = 2) for (i = 0; i 26; i+) / 循环左移两位 c1i = c0i + 2; d1i = d0i + 2; c126 = c00; d126 = d00; c127 = c01; d127 = d01; for (i = 0; i 28; i+) ki = c1i; /生成子密钥ki ki + 28 = d1i; 注意:生成的子密钥不同,所需循环左移的位数也不同。在编程中,生成不同的子密钥应以上述offset表为准。2.5解密DES的解密过程和DES的加密过程完全类似,只不过将16圈的子密钥序列K1,K2K16的顺序倒过来。即第一圈用第16个子密钥K16,第二圈用K15,其余类推。第一圈:图2-6加密后的结果图2-7:加密后的结果L=R15, R=L15f(R15,K16)f(R15,K16)=L15同理R15=L14f(R14,K15), L15=R14。同理类推:得 L=R0, R=L0。其程序源代码与加密相同。三、系统程序设计与实现3.1程序设计步骤3.1.1程序开发平台及工具软件版本:jdk1.6.0, JCreator Pro v3.5.013 汉化版平台:Windows XP3.1.2源代码:import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;public class key extends JFrame int shu1;JLabel jl1, jl2;String cc;JButton queding, xuanz, jiami, jiemi;JTextField lujin, key;JTextArea nr;JRadioButton qu, xie;ButtonGroup fz;File f;public key() Container c = getContentPane(); JPanel jp1 = new JPanel(); jl1 = new JLabel(输入路径); lujin = new JTextField(15); xuanz = new JButton(选择); jp1.add(jl1); jp1.add(lujin); jp1.add(xuanz); c.add(jp1, BorderLayout.NORTH); nr = new JTextArea(); c.add(new JScrollPane(nr), BorderLayout.CENTER); qu = new JRadioButton(写入); xie = new JRadioButton(取出, true); fz = new ButtonGroup(); fz.add(qu); fz.add(xie); jl2 = new JLabel(密钥); key = new JTextField(15); jiami = new JButton(加密); jiemi = new JButton(解密); JPanel jp4 = new JPanel(); jp4.setLayout(new GridLayout(2, 1, 5, 5); JPanel jp2 = new JPanel(); jp2.add(jl2); jp2.add(key); jp2.add(jiami); jp2.add(jiemi); jp4.add(jp2); JPanel jp3 = new JPanel(); queding = new JButton(确定); jp3.add(qu); jp3.add(xie); jp3.add(queding); jp4.add(jp3); c.add(jp4, BorderLayout.SOUTH); queding.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) jian(); if (qu.isSelected() shuchu(); if (xie.isSelected() qu(); ); xuanz.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) JFileChooser fileChooser = new JFileChooser(); if(fileChooser.showOpenDialog(key.this) = JFileChooser.APPROVE_OPTION) String fileName=fileChooser.getSelectedFile().getAbsolutePath(); lujin.setText(fileName); ); jiemi.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) ObjectInputStream input; try input = new ObjectInputStream(new FileInputStream(lujin.getText(); int mima = Integer.parseInt(key.getText(); AA ac = (AA) input.readObject(); if (ac.getShu() = mima) nr.setText(ac.cc); shuchu(); else nr.setText(错误的key); catch (Exception e) nr.setText(无法解密); ); jiami.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) AA a = new AA(nr.getText(); key.setText(a.shu + ); try ObjectOutputStream output = new ObjectOutputStream( new FileOutputStream(lujin.getText(); output.writeObject(a); output.flush(); output.close(); qu(); baocun(); catch (Exception e) nr.setText(必须选择加密文件保存地址,文件不存在或者无法加密文件,加密文件不能含有换行); ); setSize(380, 350); setVisible(true);public void jian() f = new File(lujin.getText(); try f.createNewFile(); catch (IOException e) JOptionPane.showMessageDialog(null, 路径错误); public void shuchu() try FileOutputStream out = new FileOutputStream(f); byte buf = nr.getText().getBytes(); try out.write(buf); out.flush(); out.close(); catch (IOException e) / e.printStackTrace(); catch (FileNotFoundException e) / e.printStackTrace(); public void qu() try FileInputStream in = new FileInputStream(f); int a = (int) f.length(); byte buf = new bytea; try int len = in.read(buf); if (len = -1) System.out.println(文件为空); else nr.setText(new String(buf, 0, len); catch (IOException e) / e.printStackTrace(); catch (FileNotFoundException e) / e.printStackTrace(); public static void main(String arge) key s = new key(); s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public String mzi() String ccc = ; int zu = 1, 2, 3, 4, 5, 6, 7, 8, 9 ; for (int i = 0; i 6; i+) int second = (int) (Math.random() * 9); ccc += zusecond; return ccc;public void baocun() AA a = new AA(); s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论