ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:30.59KB ,
资源ID:14598543      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-14598543.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java 加密与加密.docx)为本站会员(b****5)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

java 加密与加密.docx

1、java 加密与加密学号2015-2016学年 第二学期1408210136面向对象程序设计课程设计报告题目:文件的加密与解密专业:计算机科学与技术班级:14级(2)班姓名:王欣指导教师:史学梅成绩:计算机学院2016年5月10日目录 1 设计内容及要求.22 总体设计.23 详细设计.34 总结.14 致谢.14 参考文献.14 源代码.141 设计内容及要求 1.1 设计要求 1.问题描述 通过编程,实现“加密与解密”功能。给定任意一个文本文件,进行加密,生成另一个文件。对加密后的文件还原。 2.基本要求 采用图形用户界面1、给定任意一个文本文件,进行加密,生成另一个文件。 2、对加密后的

2、文件还原 1.2流程图图 流程图2 总体设计利用文件的输入输出流,按字符读取文件内容,把读取的内容,注意进行处理后,在重新写入新文件,实现文件加密。用到的类:FileRead,FileWrite.添加窗体并布置面板,中间用到了,弹出对话框的事件。设计的类有,Frame,Panel,J JOptionPane。文件选择器的载入。通过为按钮添加事件监听,来实现文件选择器的触发操作。用到的类为:JFileChooser。自定义异常的种类,实现异常的灵活应用。适当的调整程序的终止点或者循环点。3 详细设计 3.1 代码分析 1 加密函数 输入: 要加密的文件,密码(由0-F组成,共48个字符,表示3个

3、8位的密码)如: AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 其中: AD67EA2F3BE6E5AD DES密码一 D368DFE03120B5DF DES密码二 92A8FD8FEC2F0746 DES密码三 输出: 对输入的文件加密后,保存到同一文件夹下增加了.tdes扩展名的文件中。 代码:public static void main(String args) FileEncrypter fe = new FileEncrypter(); fe.show(); FileEncrypterT() this.setSize(WIDTH

4、,HEIGHT); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screenSize = tk.getScreenSize(); this.setLocation(screenSize.width - WIDTH)/2, (screenSize.height - HEIGHT)/2); this.setTitle(文件加密器(TriDES); Container c = this

5、.getContentPane(); c.setLayout( new FlowLayout(); final FilePanel fp = new FilePanel(文件选择); c.add(fp); final KeyPanel pp = new KeyPanel(密码); c.add(pp); JButton jbE = new JButton(加密); c.add(jbE); jbE.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) File file = new

6、 File(fp.getFileName(); if (file.exists() encrypt(file.getAbsoluteFile(),pp.getKey(); else JOptionPane.showMessageDialog( null,请选择文件!,提示,JOptionPane.OK_OPTION); ); JButton jbD = new JButton(解密); c.add(jbD); jbD.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) Fil

7、e file = new File(fp.getFileName(); if (file.exists() decrypt(file.getAbsoluteFile(),pp.getKey(); else JOptionPane.showMessageDialog( null,请选择文件!,提示,JOptionPane.OK_OPTION); );private void encrypt(File fileIn,String sKey) try if(sKey.length() = 48) byte bytK1 = getKeyByStr(sKey.substring(0,16); byte

8、bytK2 = getKeyByStr(sKey.substring(16,32); byte bytK3 = getKeyByStr(sKey.substring(32,48); FileInputStream fis = new FileInputStream(fileIn); byte bytIn = new byte(int)fileIn.length(); for(int i = 0;ifileIn.length();i+) bytIni = (byte)fis.read(); /加密 byte bytOut = encryptByDES(encryptByDES( encryptB

9、yDES(bytIn,bytK1),bytK2),bytK3); String fileOut = fileIn.getPath() + .tdes; FileOutputStream fos = new FileOutputStream(fileOut); for(int i = 0;ibytOut.length;i+) fos.write(int)bytOuti); fos.close(); JOptionPane.showMessageDialog( this,加密成功!,提示,JOptionPane.OK_OPTION); else JOptionPane.showMessageDia

10、log( this,密码长度必须等于48!,错误信息,JOptionPane.ERROR_MESSAGE); catch(Exception e) e.printStackTrace(); 2 解密函数 输入: 要解密的文件,密码(由0-F组成,共48个字符,表示3个8位的密码)如: AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 其中: AD67EA2F3BE6E5AD DES密码一 D368DFE03120B5DF DES密码二 92A8FD8FEC2F0746 DES密码三 输出: 对输入的文件解密后,保存到用户指定的文件中。代码:pri

11、vate void decrypt(File fileIn,String sKey) try if(sKey.length() = 48) String strPath = fileIn.getPath(); if(strPath.substring(strPath.length()-5).toLowerCase().equals(.tdes) strPath = strPath.substring(0,strPath.length()-5); else JOptionPane.showMessageDialog( this,不是合法的加密文件!,提示,JOptionPane.OK_OPTIO

12、N); return; JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(.); chooser.setSelectedFile(new File(strPath);/用户指定要保存的文件 int ret = chooser.showSaveDialog(this); if(ret=JFileChooser.APPROVE_OPTION) byte bytK1 = getKeyByStr(sKey.substring(0,16); byte bytK2 = getKeyByStr(sK

13、ey.substring(16,32); byte bytK3 = getKeyByStr(sKey.substring(32,48); FileInputStream fis = new FileInputStream(fileIn); byte bytIn = new byte(int)fileIn.length(); for(int i = 0;ifileIn.length();i+) bytIni = (byte)fis.read(); /解密 byte bytOut = decryptByDES(decryptByDES( decryptByDES(bytIn,bytK3),bytK

14、2),bytK1); File fileOut = chooser.getSelectedFile(); fileOut.createNewFile(); FileOutputStream fos = new FileOutputStream(fileOut); for(int i = 0;ibytOut.length;i+) fos.write(int)bytOuti); fos.close(); JOptionPane.showMessageDialog( this,解密成功!,提示,JOptionPane.OK_OPTION); else JOptionPane.showMessageD

15、ialog( this,密码长度必须等于48!,错误信息,JOptionPane.ERROR_MESSAGE); catch(Exception e) JOptionPane.showMessageDialog( this,解密失败,请核对密码!,提示,JOptionPane.OK_OPTION); 3 用DES方法加密输入的字节 bytKey需为8字节长,是加密的密码代码:private byte encryptByDES(byte bytP,byte bytKey) throws Exception DESKeySpec desKS = new DESKeySpec(bytKey); Se

16、cretKeyFactory skf = SecretKeyFactory.getInstance(DES); SecretKey sk = skf.generateSecret(desKS); Cipher cip = Cipher.getInstance(DES); cip.init(Cipher.ENCRYPT_MODE,sk); return cip.doFinal(bytP); 4 用DES方法解密输入的字节 bytKey需为8字节长,是解密的密码代码:private byte decryptByDES(byte bytE,byte bytKey) throws Exception

17、DESKeySpec desKS = new DESKeySpec(bytKey); SecretKeyFactory skf = SecretKeyFactory.getInstance(DES); SecretKey sk = skf.generateSecret(desKS); Cipher cip = Cipher.getInstance(DES); cip.init(Cipher.DECRYPT_MODE,sk); return cip.doFinal(bytE); 5 输入密码的字符形式,返回字节数组形式。 如输入字符串:AD67EA2F3BE6E5AD 返回字节数组:173,10

18、3,234,47,59,230,229,173代码: private byte getKeyByStr(String str) byte bRet = new bytestr.length()/2; for(int i=0;istr.length()/2;i+) Integer itg = new Integer(16*getChrInt(str.charAt(2*i) + getChrInt(str.charAt(2*i+1); bReti = itg.byteValue(); return bRet; 6 计算一个16进制字符的10进制值 输入:0-F代码:private int getC

19、hrInt(char chr) int iRet=0; if(chr=0.charAt(0) iRet = 0; if(chr=1.charAt(0) iRet = 1; if(chr=2.charAt(0) iRet = 2; if(chr=3.charAt(0) iRet = 3; if(chr=4.charAt(0) iRet = 4; if(chr=5.charAt(0) iRet = 5; if(chr=6.charAt(0) iRet = 6; if(chr=7.charAt(0) iRet = 7; if(chr=8.charAt(0) iRet = 8; if(chr=9.ch

20、arAt(0) iRet = 9; if(chr=A.charAt(0) iRet = 10; if(chr=B.charAt(0) iRet = 11; if(chr=C.charAt(0) iRet = 12; if(chr=D.charAt(0) iRet = 13; if(chr=E.charAt(0) iRet = 14; if(chr=F.charAt(0) iRet = 15; return iRet; 7 文件选择组件代码:class FilePanel extends JPanel FilePanel(String str) JLabel label = new JLabel

21、(str); JTextField fileText = new JTextField(35); JButton chooseButton = new JButton(浏览.); this.add(label); this.add(fileText); this.add(chooseButton); clickAction ca = new clickAction(this); chooseButton.addActionListener(ca); public String getFileName() JTextField jtf = (JTextField)this.getComponen

22、t(1); return jtf.getText(); private class clickAction implements ActionListener clickAction(Component c) cmpt = c; public void actionPerformed(ActionEvent event) JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(.); int ret = chooser.showOpenDialog(cmpt); if(ret=JFileCh

23、ooser.APPROVE_OPTION) JPanel jp = (JPanel)cmpt; JTextField jtf = (JTextField)jp.getComponent(1); jtf.setText(chooser.getSelectedFile().getPath(); private Component cmpt; 8 密码生成组件代码:class KeyPanel extends JPanel KeyPanel(String str) JLabel label = new JLabel(str); JTextField fileText = new JTextField

24、(35); JButton chooseButton = new JButton(随机产生); this.add(label); this.add(fileText); this.add(chooseButton); clickAction ca = new clickAction(this); chooseButton.addActionListener(ca); /返回生成的密码(48个字符长度) public String getKey() JTextField jtf = (JTextField)this.getComponent(1); return jtf.getText(); p

25、rivate class clickAction implements ActionListener clickAction(Component c) cmpt = c; public void actionPerformed(ActionEvent event) try KeyGenerator kg = KeyGenerator.getInstance(DES); kg.init(56); Key ke = kg.generateKey(); byte bytK1 = ke.getEncoded(); ke = kg.generateKey(); byte bytK2 = ke.getEn

26、coded(); ke = kg.generateKey(); byte bytK3 = ke.getEncoded(); JPanel jp = (JPanel)cmpt; JTextField jtf = (JTextField)jp.getComponent(1); jtf.setText(getByteStr(bytK1)+getByteStr(bytK2)+getByteStr(bytK3); catch(Exception e) e.printStackTrace(); private String getByteStr(byte byt) String strRet = ; fo

27、r(int i=0;ibyt.length;i+)/System.out.println(byti); strRet += getHexValue(byti&240)/16); strRet += getHexValue(byti&15); return strRet; private String getHexValue(int s) String sRet=null; switch (s) case 0: sRet = 0;break; case 1: sRet = 1;break; case 2: sRet = 2;break; case 3: sRet = 3;break; case 4: sRet = 4;break; case 5: sRet = 5;break; case 6: sRet = 6;break; case 7: sRet = 7;break; case 8: sRet = 8;break; case 9: sRet = 9;break; case 10: sRet = A;break; case 11: sRet = B;break; case 12: sRet = C;break; case 13: sRet = D;break; case 14: sRet = E;break; case 15: sRet = F; return sRet;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2