首页 > 代码库 > 【Java】Swing+IO流实现一个简单的文件加密程序
【Java】Swing+IO流实现一个简单的文件加密程序
EncrytService
package com.my.service;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;public class EncryptService { // 默认密匙路径 private static String DEFAULT_KEY_URL = ".//KEY"; // 临时文件路径 private static String DEFAULT_TEMP_URL = ".//TEMP"; // 读取密匙 private int key[] = new int[128]; private void readKey() { File keyFile = new File(DEFAULT_KEY_URL); try { FileInputStream localKey = new FileInputStream(keyFile); for (int i = 0; i < 128; ++i) { key[i] = localKey.read(); } } catch (Exception e) { e.printStackTrace(); } } // 生成新的密匙 public void makeKey() { try { File keyFile = new File(DEFAULT_KEY_URL); FileOutputStream fos = new FileOutputStream(keyFile); for (int i = 0; i < 128; ++i) { fos.write((int)(Math.random()*128)); } readKey(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } // 加密文件 public void encryptFile(File file) { try { FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(new File(DEFAULT_TEMP_URL)); int length = fis.available(); for (int i = 0; i < length; ++i) { fos.write(fis.read() + key[i%128]); } fis.close(); fos.close(); FileInputStream fileInputStream = new FileInputStream(new File(DEFAULT_TEMP_URL)); FileOutputStream fileOutputStream = new FileOutputStream(file); int length2 = fileInputStream.available(); for (int i = 0; i < length2; ++i) { fileOutputStream.write(fileInputStream.read()); } fileInputStream.close(); fileOutputStream.close(); } catch (Exception e) { e.printStackTrace(); } } // 解密文件 public void decryptFile(File file) { try { FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(new File(DEFAULT_TEMP_URL)); int length = fis.available(); for (int i = 0; i < length; ++i) { fos.write(fis.read() - key[i%128]); } fis.close(); fos.close(); FileInputStream fileInputStream = new FileInputStream(new File(DEFAULT_TEMP_URL)); FileOutputStream fileOutputStream = new FileOutputStream(file); int length2 = fileInputStream.available(); for (int i = 0; i < length2; ++i) { fileOutputStream.write(fileInputStream.read()); } fileInputStream.close(); fileOutputStream.close(); } catch (Exception e) { e.printStackTrace(); } }}
Main
package com.my.ui;import com.my.service.EncryptService;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;public class Main extends JFrame implements ActionListener { private EncryptService encryptService = new EncryptService(); // 设置默认大小 private static final int DEFAULT_WIDTH = 396; private static final int DEFAULT_HEIGHT = 145; // 组件 private JFileChooser chooser; private JButton buttonEncrypt; private JButton buttonDecrypt; private JButton buttonMakeKey; JTextField fileText; JTextField keyText; // 文件路径 private String filePath; private String keyPath; // 初始化加密页面 public Main() { setTitle("文件加密程序"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); setResizable(false); setLocationRelativeTo(null); JPanel panUser = new JPanel(); // 创建组件 fileText = new JTextField(); fileText.setEditable(false); keyText = new JTextField(); keyText.setEditable(false); JButton btnFile = new JButton("...."); btnFile.setFocusPainted(false); JButton btnKey = new JButton("..."); btnKey.setFocusPainted(false); btnKey.setEnabled(false); // 布局 panUser.setLayout(new GridLayout(2, 3)); panUser.add(new JLabel("源文件路径:")); panUser.add(fileText); panUser.add(btnFile); panUser.add(new JLabel("密匙路径:")); panUser.add(keyText); panUser.add(btnKey); buttonEncrypt = new JButton("加密"); buttonEncrypt.setFocusPainted(false); buttonDecrypt = new JButton("解密"); buttonDecrypt.setFocusPainted(false); buttonMakeKey = new JButton("生成新的密匙"); buttonMakeKey.setFocusPainted(false); JPanel panBtn = new JPanel(); panBtn.setLayout(new FlowLayout()); panBtn.add(buttonEncrypt); panBtn.add(buttonDecrypt); panBtn.add(buttonMakeKey); setLayout(new BorderLayout()); add(panUser, BorderLayout.CENTER); add(panBtn, BorderLayout.SOUTH); // 注册事件监听 btnFile.addActionListener(this); btnKey.addActionListener(this); buttonMakeKey.addActionListener(this); buttonEncrypt.addActionListener(this); buttonDecrypt.addActionListener(this); chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); } public static void main(String[] args) { JFrame frame = new Main(); frame.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("....")) { int result = chooser.showOpenDialog(null); if (result == JFileChooser.APPROVE_OPTION) { filePath = chooser.getSelectedFile().getPath(); fileText.setText(filePath); } } if (e.getActionCommand().equals("...")) { int result = chooser.showOpenDialog(null); if (result == JFileChooser.APPROVE_OPTION) { keyPath = chooser.getSelectedFile().getPath(); keyText.setText(keyPath); } } if (e.getActionCommand().equals("加密")) { encryptService.encryptFile(new File(filePath)); System.out.println("加密成功"); } if (e.getActionCommand().equals("解密")) { encryptService.decryptFile(new File(filePath)); System.out.println("解密成功"); } if (e.getActionCommand().equals("生成新的密匙")) { encryptService.makeKey(); keyText.setText(new File("").getAbsolutePath() + "\\KEY"); System.out.println("成功生成新的密匙"); } }}
【Java】Swing+IO流实现一个简单的文件加密程序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。