【Java】Swing+IO流实现一个简单的文件加密程序(demo版)
留着参考

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流实现一个简单的文件加密程序(demo版)的更多相关文章
- 【Java】Swing+IO流实现一个简单的文件加密程序(较完整版)
留着参考 beans package com.my.bean; import java.io.Serializable; public class EncryptedFile implements S ...
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- 使用IO流实现一个简单的小Dome
(一) 在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,在创建一个目录IOTest,之后将HelloWorld.txt移动到IOTest目录下去:之后遍历IOTest ...
- 【Java】IO流简单分辨
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827509.html Java的IO流体系十分庞大,并且体系层次稍复杂,很容易记混或记错.在此,我把平时经常用 ...
- Java基础——IO流
今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...
- Java之IO流详解
IO流 Input/Output 完成输入/输出 应用程序运行时——数据在内存中 ←→ 把数据写入硬盘(磁带) 内存中的数据不可持久保存的 输入:从外部存储器(硬盘.磁带.U盘)把数据读入内存. ...
- JAVA中IO流总结
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42119261 我想你对JAVA的IO流有所了解,平时使用的 ...
- Java的IO流——(七)
目录结构:
- Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)
Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...
随机推荐
- HTML特殊字符的html、js、css写法汇总
⇠ 箭头类 符号 UNICODE 符号 UNICODE HTML JS CSS HTML JS CSS ⇠ ⇠ \u21E0 \21E0 ⇢ ⇢ \u21E2 \2 ...
- apache的ab命令做压力测试
1. 最基本的关心两个选项 -c -n 例: ./ab -c 100 -n 10000 http://127.0.0.1/index.php -c 100 即:每次并发100个-n 10000 即: ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.1——推荐配置
问题: 你想要提高Gradle的构建效率. 解决方案: 使用下面推荐的技术组合. 讨论: 首先,这里没有可以影响app表现的建议.有很多你可以做的事来提高app,很多都和Android的混淆工具有关. ...
- spring中关于FeignClient的错误 QueryParam.value() was empty on parameter 1
现创建一个feignClient的接口,在其他服务调用改client时发现服务启动失败错误日志如下: org.springframework.beans.factory.BeanCreationExc ...
- JZOJ.5230【NOIP2017模拟8.5】队伍统计
Description 现在有n个人要排成一列,编号为1->n .但由于一些不明原因的关系,人与人之间可能存在一些矛盾关系,具体有m条矛盾关系(u,v),表示编号为u的人想要排在编号为v的人前面 ...
- Powershell ——findstr
从文件中找出关键字 $colItems = Get-ChildItem d:\test #定义文件夹的路径 foreach ($i in $colItems) #循环获取文件夹下的txt文件 { $f ...
- Grammar Rules
Grammar Rules Here are 20 simple rules and tips to help you avoid mistakes in English grammar. For m ...
- 页面的日志服务 web页面渲染 服务 ; 服务耦合带来的问题
情景: 虽然对web服务做了3节点的负载均衡,但是由于埋点数据的落盘的代码也在相同服务器上,导致当flume处理日志的吞吐量达到瓶颈时,3节点的请求积压,挤占服务器资源,导致接口数据处理迟缓,页面加载 ...
- Django之html-模板继承
在编程的过程中,我们经常会重复性的写了很多的代码,比如一个页面的框架部分,这样我又多少个页面就得写上多少次,这样既不好维护,也不够高效,所以我们引出了html的模板继承部分. 1.写好一个html文件 ...
- Pycharm在创建py文件时,自动添加文件头注释
依次File -> Settings -> Editor -> File and Code Templates -> Python Script 添加以下代码: # -*- ...