




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 JAVA文件加密器转 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.security.*; import javax.crypto.*; import javax.crypto.spec.*; /* 文件名:FileEncrypter.java JDK:1.40以上 说明:文件加密 加密方法:三重DES加密 加密过程:对选中的文件加密后在同文件夹下生成一个增加了.tdes 扩展名的加密文件 解密过程:对选中的加密文件(必须有.tdes扩展名)进行解密 */ public class FileEncrypter extends JFrame public static final int WIDTH = 550; public static final int HEIGHT = 200; public static void main(String args) FileEncrypter fe = new FileEncrypter(); fe.show(); FileEncrypter() this.setSize(WIDTH,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.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 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) File file = new File(fp.getFileName(); if (file.exists() decrypt(file.getAbsoluteFile(),pp.getKey(); else JOptionPane.showMessageDialog( null,请选择文件!,提示,JOptionPane.OK_OPTION); ); /* 加密函数 输入: 要加密的文件,密码(由0-F组成,共48个字符,表示3个8位的密码)如: AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 其中: AD67EA2F3BE6E5AD DES密码一 D368DFE03120B5DF DES密码二 92A8FD8FEC2F0746 DES密码三 输出: 对输入的文件加密后,保存到同一文件夹下增加了.tdes扩展名的文件中。 */ private void encrypt(File fileIn,String sKey) try if(sKey.length() = 48) byte bytK1 = getKeyByStr(sKey.substring(0,16); byte 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( encryptByDES(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.showMessageDialog( this,密码长度必须等于48!,错误信息,JOptionPane.ERROR_MESSAGE); 作者:qiugr 0位粉丝 2007-9-7 22:00 回复此发言 2 JAVA文件加密器转 catch(Exception e) e.printStackTrace(); /* 解密函数 输入: 要解密的文件,密码(由0-F组成,共48个字符,表示3个8位的密码)如: AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 其中: AD67EA2F3BE6E5AD DES密码一 D368DFE03120B5DF DES密码二 92A8FD8FEC2F0746 DES密码三 输出: 对输入的文件解密后,保存到用户指定的文件中。 */ private 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_OPTION); 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(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 = decryptByDES(decryptByDES( decryptByDES(bytIn,bytK3),bytK2),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.showMessageDialog( this,密码长度必须等于48!,错误信息,JOptionPane.ERROR_MESSAGE); catch(Exception e) JOptionPane.showMessageDialog( this,解密失败,请核对密码!,提示,JOptionPane.OK_OPTION); /* 用DES方法加密输入的字节 bytKey需为8字节长,是加密的密码 */ private byte encryptByDES(byte bytP,byte bytKey) throws Exception DESKeySpec desKS = new DESKeySpec(bytKey); SecretKeyFactory skf = SecretKeyFactory.getInstance(DES); SecretKey sk = skf.generateSecret(desKS); Cipher cip = Cipher.getInstance(DES); cip.init(Cipher.ENCRYPT_MODE,sk); return cip.doFinal(bytP); /* 用DES方法解密输入的字节 bytKey需为8字节长,是解密的密码 */ private byte decryptByDES(byte bytE,byte bytKey) throws Exception 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); /* 输入密码的字符形式,返回字节数组形式。 如输入字符串:AD67EA2F3BE6E5AD 返回字节数组:173,103,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); 作者:qiugr 0位粉丝 2007-9-7 22:00 回复此发言 3 JAVA文件加密器转 bReti = itg.byteValue(); return bRet; /* 计算一个16进制字符的10进制值 输入:0-F */ private int getChrInt(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.charAt(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; /* 文件选择组件。 */ class FilePanel extends JPanel FilePanel(String str) JLabel label = new JLabel(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.getComponent(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=JFileChooser.APPROVE_OPTION) JPanel jp = (JPanel)cmpt; JTextField jtf = (JTextField)jp.getComponent(1); jtf.setText(chooser.getSelectedFile().getPath(); private Component cmpt; /* 密码生成组件。 */ class KeyPanel extends JPanel KeyPanel(String str) JLabel label = new JLabel(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); /返回生成的密码(48个字符长度) public String getKey() JTextField jtf = (JTextField)this.getComponent(1); return jtf.getText(); private 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.getEncoded(); ke = kg.generateKey(); byte bytK3 = ke.getEncoded(); JPanel jp = (JPanel)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民法学债权课件
- 北美雅思考试真题及答案
- 民歌欣赏课件
- 民族风土人情课件
- 新质生产力国际贸易现状分析
- 基层林业新质生产力发展路径
- 新技术驱动新质生产力案例
- 新质生产力与资本的协同发展
- 助推新质生产力发展的策略
- 2025年康复医学综合评估与康复方案设计考试卷答案及解析
- 2025国家能源集团招聘笔试历年参考题库附带答案详解
- 编织课件教学课件
- 认证机构保密管理办法
- 土建类安全员C2模拟试题及参考答案
- 公司财务报表分析技巧与方法
- 硒鼓基础知识培训内容课件
- 心脏猝死教学课件
- 成长型思维培养-洞察及研究
- (2025)全国辅警考试题库及答案
- 体操新课标解读
- 2025年初级薪税师(三级)《理论知识》考试真题(题后附答案及解析)
评论
0/150
提交评论