Java文件加密和解密
本软件的制作原理是:文件的读写,拷贝。通过从一个文件中读取字节,在写入时加上一个偏移量来实现加密功能,解密则返过来,即减去一个相同的偏移量。
本软件的优点是:1.实现了大文件的加密,对视频,歌曲,文本文件等都是可以的。2.大文件加密的时候,加了线程处理,不会造成按钮按下去后,要到加密或解密完成时才能弹起,给用户造成不便。3.软件的基本健壮性已经实现,加密或解密完成时,会弹出一个提示窗口,若没弹出,则代表没有完成加密或解密。4,.软件是使用了2个下拉框来实现的,方便用户使用,输入的加密的码的范围是00~99,一共100个,即破解率为1%。5.本软件是把用户的加密的码写入了用户的文件中,待到用户解密时,就会获取那个加入的加密的码,与用户输入的解密的码相比较,这实现了多个文件的压缩。6.本软件新加了进度条,能反映加密过程。
本软件有待升级的地方:1.加密解密大文件是速度较慢,请耐心等待。2.加密或解密是针对原文件的,若是加密失败,原文件会被破坏,用户使用时,一定要先备份,先试一下加密和解密是否成功,若是成功了,再对原文件加密。
接下来附上源代码:
这是加密解密和进度条界面的代码:
package ctong17; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileInputStream; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JTextField; public class FileLock { // private static int rate; private static JProgressBar jpr = new JProgressBar(); private static FileInputStream fis; private static JComboBox box,box1,box2,box3; private static File f,file,file1 ; private static JTextField jt1,jt3; /** * 文件加密界面 */ public static void init_ya(){ final JFrame jf_ya=new JFrame(); jf_ya.setTitle("文件加密系统"); jf_ya.setLocation(530,175); jf_ya.setResizable(false); jf_ya.setSize(300, 300); jf_ya.setIconImage(new ImageIcon("4.gif").getImage());//添加方框的图标 JPanel center = new JPanel(); center.setLayout(new GridLayout(2,3)); JPanel south = new JPanel(); JButton btn_ya = new JButton("开始加密(Enter)"); JButton btn_fanhui = new JButton("返回(Backspace)"); JButton btn_xuanze = new JButton("选择"); //这是下拉框 box =new JComboBox(); box.addItem("0"); box.addItem("1"); box.addItem("2"); box.addItem("3"); box.addItem("4"); box.addItem("5"); box.addItem("6"); box.addItem("7"); box.addItem("8"); box.addItem("9"); box1 =new JComboBox(); box1.addItem("0"); box1.addItem("1"); box1.addItem("2"); box1.addItem("3"); box1.addItem("4"); box1.addItem("5"); box1.addItem("6"); box1.addItem("7"); box1.addItem("8"); box1.addItem("9"); jt1 = new JTextField(); JLabel jl1 = new JLabel("选择加密文件:",JLabel.CENTER); JLabel jl2 = new JLabel("加密码:",JLabel.CENTER); JLabel jl3=new JLabel(new ImageIcon("6.gif")); jl3.setPreferredSize(new Dimension(30,180)); center.add(jl1); center.add(jt1); center.add(btn_xuanze); center.add(jl2); center.add(box); center.add(box1); south.add(btn_ya); south.add(btn_fanhui); jf_ya.add(jl3,BorderLayout.NORTH); jf_ya.add(center,BorderLayout.CENTER); jf_ya.add(south,BorderLayout.SOUTH); jf_ya.setVisible(true); //返回按钮 btn_fanhui.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jf_ya.setVisible(false); init_First(); } }); //选择文件按钮 btn_xuanze.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //打开文件选择器 JFileChooser jc = new JFileChooser(); jc.showOpenDialog(jf_ya); file = jc.getSelectedFile(); //获取文件的绝对路径 jt1.setText(file.getAbsolutePath()); } }); //加密按钮 btn_ya.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //这个文件是中转文件,用来缓冲的 // f = new File(file.toURI()); f= new File("1.txt"); //线程,处理加密文件过程 YaThread yt = new YaThread(jpr, file,f, jt1, box, box1); yt.start(); } }); } /* * 这是主的界面 */ public static void init_First(){ final JFrame jf_first = new JFrame("文件加密系统"); jf_first.setSize(300,300); jf_first.setLocation(530,175); jf_first.setResizable(false); jf_first.setDefaultCloseOperation(3); jf_first.setIconImage(new ImageIcon("4.gif").getImage());//添加方框的图标 JPanel pa = new JPanel(); pa.setLayout(new GridLayout(1,2)); JButton btn_ya = new JButton("加密"); JButton btn_jie = new JButton("解密"); JLabel jl3=new JLabel(new ImageIcon("1.gif")); jl3.setPreferredSize(new Dimension(30,240)); pa.add(btn_ya); pa.add(btn_jie); jf_first.add(jl3,BorderLayout.NORTH); jf_first.add(pa,BorderLayout.CENTER); jf_first.setVisible(true); //解密按钮 btn_jie.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { init_jie(); jf_first.setVisible(false); } }); //加密按钮 btn_ya.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { init_ya(); jf_first.setVisible(false); } }); } /* * 这是解密的界面 */ public static void init_jie(){ final JFrame jf_jie=new JFrame("文件解密系统"); jf_jie.setLocation(530,175); jf_jie.setResizable(false); jf_jie.setSize(300, 300); jf_jie.setIconImage(new ImageIcon("4.gif").getImage());//添加方框的图标 JPanel center = new JPanel(); //中间面板设置表格布局 center.setLayout(new GridLayout(2,3)); JPanel south = new JPanel(); JButton btn_jie = new JButton("开始解密(Enter)"); JButton btn_fanhui = new JButton("返回(Backspace)"); JButton btn_xuanze = new JButton("选择"); //这是下拉框 box2 =new JComboBox(); box2.addItem("0"); box2.addItem("1"); box2.addItem("2"); box2.addItem("3"); box2.addItem("4"); box2.addItem("5"); box2.addItem("6"); box2.addItem("7"); box2.addItem("8"); box2.addItem("9"); box3 =new JComboBox(); box3.addItem("0"); box3.addItem("1"); box3.addItem("2"); box3.addItem("3"); box3.addItem("4"); box3.addItem("5"); box3.addItem("6"); box3.addItem("7"); box3.addItem("8"); box3.addItem("9"); jt3 = new JTextField(6); JLabel jl1 = new JLabel("选择解密文件:",JLabel.CENTER); JLabel jl2 = new JLabel("解密码:",JLabel.CENTER); JLabel jl3=new JLabel(new ImageIcon("8.gif")); jl3.setPreferredSize(new Dimension(30,180)); center.add(jl1); center.add(jt3); center.add(btn_xuanze); center.add(jl2); center.add(box2); center.add(box3); south.add(btn_jie); south.add(btn_fanhui); jf_jie.add(jl3,BorderLayout.NORTH); jf_jie.add(center,BorderLayout.CENTER); jf_jie.add(south,BorderLayout.SOUTH); jf_jie.setVisible(true); //选择文件的按钮 btn_xuanze.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //文件选择器,选择解密文件 JFileChooser jc = new JFileChooser(); jc.showOpenDialog(jf_jie); file1 = jc.getSelectedFile(); //获取文件的绝对路径,显示 jt3.setText(file1.getAbsolutePath()); } }); //返回按钮 btn_fanhui.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jf_jie.setVisible(false); init_First(); } }); //解密按钮 btn_jie.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //线程,用来处理解密文件的过程 JieThread jt = new JieThread(jpr, fis, f, jt3, box2, box3,file1); jt.start(); } }); } // public FileLock(int rate){ // this.rate=rate; // } //进度条界面 public static void JProgress_Bar(){ JFrame jf = new JFrame("进度"); jf.setSize(300,90); jf.setLocation(530,435); jf.setAlwaysOnTop(true); jpr.setMinimum(0); jpr.setPreferredSize(new Dimension(200,30)); jpr.setBackground(Color.WHITE); jpr.setForeground(Color.BLUE); jpr.setStringPainted(true); jf.setLayout(new FlowLayout()); jf.add(jpr); jf.setVisible(true); } public static void main(String[] args) { init_First(); } }
以下分别是加密,解密的线程(用来处理加密 解密):
package ctong17; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import javax.swing.JComboBox; import javax.swing.JOptionPane; import javax.swing.JProgressBar; import javax.swing.JTextField; public class YaThread extends Thread{ private static JProgressBar jpr; private static int rate=0; private static int count=0,count1=0; private File f,file; private static JTextField jt1; private static FileInputStream fis; private static FileOutputStream fos; private static JComboBox box,box1; private static int t1,t2; //构造函数,把需要的数据传输过来 public YaThread(JProgressBar jpr,File file,File f,JTextField jt1,JComboBox box,JComboBox box1){ this.jpr=jpr; this.file=file; this.f=f; this.jt1=jt1; this.box=box; this.box1=box1; } public void run(){ if(jt1.getText().isEmpty()) JOptionPane.showMessageDialog(null, "请选择文件!"); else{ new FileLock().JProgress_Bar(); count = (int)file.length(); count1 = count; jpr.setMaximum(2*count1); jiami(jt1.getText(),f.getAbsolutePath()); copy(f.getAbsolutePath(),jt1.getText()); //删除缓冲的文件 f.delete(); JOptionPane.showMessageDialog(null, "加密完成!"); } } public static void jiami(String filename,String newname ){ try { final int t=count1; t1=Integer.parseInt(box.getSelectedItem().toString()); t2=Integer.parseInt(box1.getSelectedItem().toString()); fis =new FileInputStream(filename); fos =new FileOutputStream(newname); //文件拷贝过程 //把用户输入的加密的码先保存在文件中,以便在以后解密时获取其的加密的码,与用户输入的解密的码比较 fos.write(t1); fos.write(t2); int n =fis.read(); while (n !=-1){ //可以进行文件的加密和解密 fos.write(n+10*t1+t2); rate=t-(--count); jpr.setValue(rate); n=fis.read(); } fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } //文件拷贝方法 public static void copy(String from,String to){ try { fis =new FileInputStream(from); fos =new FileOutputStream(to); //文件拷贝过程 int n =fis.read(); while (n !=-1){ //可以进行文件的加密和解密 fos.write(n); jpr.setValue(rate+(++count)); n=fis.read(); } fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } }
************************************
package ctong17; import java.awt.HeadlessException; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import javax.swing.JComboBox; import javax.swing.JOptionPane; import javax.swing.JProgressBar; import javax.swing.JTextField; public class JieThread extends Thread{ private static JProgressBar jpr; private static int rate=0; private static int count=0,count1=0; private static FileInputStream fis; private static FileOutputStream fos; private static JComboBox box2,box3; private static int t3,t4; private File f,file1; private static JTextField jt3; public JieThread(JProgressBar jpr,FileInputStream fis,File f,JTextField jt3,JComboBox box2,JComboBox box3,File file1){ this.jpr=jpr; this.fis=fis; this.f=f; this.jt3=jt3; this.box2=box2; this.box3=box3; this.file1=file1; } public void run(){ if(jt3.getText().isEmpty()) JOptionPane.showMessageDialog(null, "请选择文件!"); else{ try { fis = new FileInputStream(jt3.getText()); //从文件中读取加密的码,与解密的码比较 if(fis.read()==Integer.parseInt(box2.getSelectedItem().toString())&&fis.read()==Integer.parseInt(box3.getSelectedItem().toString())){ //创建缓冲文件,如果各位同志没有F盘请自改,之所以不改为C盘是因为一般的用户机子里的C盘不允许访问 new FileLock().JProgress_Bar(); f= new File("1.txt"); // f= new File(file1.toURI()); count = (int)file1.length(); count1 = count; jpr.setMaximum(2*count1-4); jiemi(jt3.getText(),f.getAbsolutePath()); copy(f.getAbsolutePath(),jt3.getText()); //删除缓冲文件 f.delete(); JOptionPane.showMessageDialog(null, "解密完成!"); }else JOptionPane.showMessageDialog(null, "解密码不正确,请重新输入"); } catch (NumberFormatException e1) { e1.printStackTrace(); } catch (HeadlessException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } } public static void jiemi(String filename,String newname){ try { final int t=count1; t3=Integer.parseInt(box2.getSelectedItem().toString()); t4=Integer.parseInt(box3.getSelectedItem().toString()); fis =new FileInputStream(filename); fos =new FileOutputStream(newname); //文件拷贝过程 //跳过2个字节,即一个字的大小 fis.skip(2); int n =fis.read(); while (n !=-1){ //可以进行文件的加密和解密 fos.write(n-10*t3-t4); rate=t-(--count); jpr.setValue(rate); n=fis.read(); } fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } public static void copy(String from,String to){ try { fis =new FileInputStream(from); fos =new FileOutputStream(to); //文件拷贝过程 int n =fis.read(); while (n !=-1){ //可以进行文件的加密和解密 fos.write(n); jpr.setValue(rate+(++count)); n=fis.read(); } fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } }
以下是操作的图片:
文件加密的可执行程序已发,感兴趣的同学可以下载!欢迎留言,我会积极采纳你们的宝贵建议或意见。
相关推荐
"java实现文件加密解密" Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,...
"加密和解密文件"的主题涉及到信息安全的核心技术,它确保了数据在未经授权的情况下无法被访问或理解。这里的描述提到这是一个带有图形用户界面(GUI)的工具,这使得用户能够更加直观和便捷地操作加密和解密过程,...
本次使用JAVA语言,采用3DES加密算法进行对文本文件的加密,通过二进制和十六进制的转换来实现,产生加密文件,再对加密文件进行解密。 关键词:DES加密算法、加密、解密。摘要 随着现代网络技术的飞速发展,人们...
"com"目录下的子目录结构可能对应着Java的包名,包含了实现加密解密功能的类文件。而"resource"目录可能包含了配置文件、密钥文件或其他辅助资源,这些在加密解密过程中可能被用到。 总的来说,这个实例为我们展示...
本文详细介绍了Java实现的RSA加密解密算法,包括密钥对生成、公钥和私钥的使用、加密和解密、密钥文件的生成等知识点。这些知识点对于Java开发者来说非常重要,可以帮助他们更好地理解和实现RSA加密解密算法。
综上所述,Java文件加密解密涉及多种技术和概念,包括选择合适的加密算法、管理密钥、处理文件流、确保数据完整性和安全性等。通过理解并正确应用这些知识点,可以构建出强大的文件加密和解密系统。
上述代码是一个Java小工具,名为 "TextEncryptor",它提供了文本加密和解密的功能。用户可以使用指定的密钥对文本进行加密,然后再将加密后的文本解密为原始文本。该工具使用DES加密算法,用户可以在 `main` 方法中...
在Java编程语言中,公钥和私钥加密解密是一种重要的安全技术,广泛应用于网络通信、数据传输等领域。本文将详细解析如何使用Java实现公钥和私钥的加解密操作,以及相关的关键概念和代码示例。 首先,我们要了解公钥...
Java 文件加密解密器 可对所有文件进行加密和解密,第一次运行加密,第二次运行解密。
1.40以上 说明:文件加密 加密方法:三重DES加密 加密过程:对选中的文件加密后在同文件夹下生成一个增加了".tdes"扩展名的加密文件 (完美加密,更改后缀名也不可以打开)解密过程:对选中的加密文件(必须有".tdes...
在这个Java课程设计中,我们将深入探讨如何使用Java实现文件的加密和解密过程。 首先,我们需要理解加密的基本概念。加密是一种将明文数据转换为难以理解的形式(密文)的过程,目的是防止未经授权的访问者获取信息...
在实现AES加密解密时,要特别注意错误处理和数据完整性检查。例如,确保文件读取和写入的正确性,以及在解密过程中处理可能的异常。此外,www.willvc.com.cn 提供的资源可能是进一步学习和解决问题的途径。 总之,...
总结来说,Java结合RSA算法和数字证书提供了强大的文件加密解密解决方案。通过生成密钥对、创建和管理数字证书,以及使用`Cipher`进行加解密操作,可以确保数据的安全传输和存储。了解并掌握这些技术,对于开发安全...
这些文件可以直接运行,用于演示如何在Java和JavaScript之间进行DES加密解密。通过查看和理解这些代码,你可以更好地了解如何在实际项目中应用这一技术。 6. **安全注意事项**: 虽然DES在某些场景下仍可用,但它...
在提供的压缩包文件"java aes加密、解密"中,应该包含了一个完整的Java项目,包含了上述所有步骤的代码示例,并且每个方法都有详细的注释,可以直接运行查看效果。这个项目无需任何额外的插件,只需要Java环境即可...
Java加密解密工具包,通常用于保护敏感数据的安全,防止未经授权的访问或篡改。这个名为"JCT"的工具包提供了丰富的功能,使得开发者在Java应用中集成加密和解密操作变得更加简单。下面我们将详细探讨Java加密的相关...
在"Java异或加密解密.txt"这个文件中,可能包含了具体的Java代码示例,展示了如何使用Java实现上述的异或加密和解密过程。通过阅读和理解这段代码,你可以学习到如何在Java程序中应用异或加密技术,从而保护敏感数据...
Java通过`java.security.KeyPairGenerator`生成公钥和私钥,然后使用`Cipher`进行加密解密操作。 5. **文件加密与解密步骤** - 对文件进行加密时,通常先将文件读入内存,然后按块进行加密,最后将加密后的数据...
源代码可能使用了Java的IO和加密库,如`java.io`和`javax.crypto`,来处理文件读写和加密解密操作。GUI部分可能使用了Swing或JavaFX的组件来构建用户交互界面,并结合事件监听来处理用户的加密和解密请求。 总的来...