爪哇版的加解密小程序
- 博客分类:
- 技术杂绘
爪哇版的加解密小程序
2012年01月16日
//要先安装JDK ,JAR包我也有
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main {
private JFrame f; //主窗口
private Button b1,b2,babout_me; //选择按钮
private Label l1,l2,lp2; //标签
private Panel p1,p2,p3,p2p; //面板
private FileDialog fd; //文件打开
private int size=21; //密码长度
//主界面
Main(){
this.f =new JFrame("文件加解密程序");
f.setBounds(450,150,500,200);
f.setVisible(true);
f.setLayout(new BorderLayout());
p1=new Panel(new FlowLayout());
p2=new Panel(new BorderLayout());
p2p=new Panel();
p3=new Panel();
b1=new Button("加密文件");
b2=new Button("解密文件");
babout_me =new Button("关于本软件");
l1=new Label("感谢使用加解密程序");
l2=new Label("by 水往高处流");
lp2=new Label(" ");
p1.add(l1);
p2.add(p2p,"Center");
p2.add(lp2,"South");
p2p.add(b1);
p2p.add(b2);
p3.add(babout_me);
p3.add(l2);
f.add(p1,"North");
f.add(p2,"Center");
f.add(p3,"South");
//加密
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent a){
lp2.setText(" ");
JM();
}
});
//解密
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent a){
lp2.setText(" ");
JM(0);
}
});
//本软件的一些情况
babout_me.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent a){
Tips();
}
});
//添加退出事件
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
//关于本软件
public void Tips(){
JFrame f =new JFrame("关于本软件");
String line="\n-------------------------------\n";
TextArea t=new TextArea("文件后缀大概如下:\n" +line+
" 1.文本类:.txt,.doc,.pdf,.html,.accdb,.cpp,.java,.ppt\n" +
" 2.多媒体类:.mp3,.mp4,.gif,.jpg,.jpeg,.mpg,.3gp,aac,.bat,.avi,.flv\n" +
" 3.压缩包类:.7z,.rar,.zip,.cab\n" +line +
"此软件会不定时修改,衷心感谢您的使用!\n"+
"本软件有不足之处欢迎给我E-main:373422113@qq.com");
t.setEditable(false); //设置为只读
f.add(t);
f.setVisible(true);
f.setBounds(550,250,450,200);
}
//加密算法
public int JM(){
fd =new FileDialog(f,"打开需要加密文件",FileDialog.LOAD);
fd.setVisible(true);
String fname=fd.getFile(); //得到文件名
String fdir=fd.getDirectory(); //得到文件所在目录
String str=fdir + "\\" + fname;// 文件绝对路径
if(fname == null){
lp2.setText("未选择文件!");
return 0;
}
lp2.setText("即将加密文件: "+fname+" 文件大小为:"+new File(str).length()+"字节");
String strpw=JOptionPane.showInputDialog(null,"请输入密码,在"+(size-1)+"个字符以内","此密码需牢记",1);
char[] password =strpw.toCharArray(); //密码
if(isArrayOutOfBounds(password)){ //检查密码长度
lp2.setText("error: 密码长度超出范围!");
return 0;
}
try {
FileInputStream fin=new FileInputStream(str);//打开文件输入流
BufferedInputStream bufin = new BufferedInputStream(fin,4096); //使用缓冲流
DataInputStream din = new DataInputStream(bufin);
String out_name =JOptionPane.showInputDialog(null,"请输入加密后的文件名");
//判断是否输入文件名
if(!isFile_name(out_name)){
lp2.setText("error:请输入文件名!");
return 0;
}
out_name += ".jm"; //加入默认后缀
FileOutputStream fout=new FileOutputStream(fdir+out_name); //打开文件输出流
BufferedOutputStream bufout = new BufferedOutputStream(fout,4096);//使用缓冲流
DataOutputStream dout = new DataOutputStream(bufout);
lp2.setText("加密文件"+fname+"中,所用时间可能会有点长,请耐心等待.....");
long time1 = System.currentTimeMillis();//开始计时
int i = runJM(din,dout,password); //调用函数
long time2 = System.currentTimeMillis();//结束计时
//关闭流
fin.close();
din.close();
fout.close();
dout.close();
i *=4;//总字节数(1 int =4 byte)
time2 -= time1; //所用时间
lp2.setText("加密了"+i+"个字节,平均加密速度:"+(i/time2)+"字节/秒"); //完成提示
String strSucce="文件 '"+fname+"' 加密成功,加密后的文件是 '"+fdir+"' 目录下的'"+out_name+"',总共用时:"+time2+"毫秒";
JOptionPane.showMessageDialog(null,strSucce,"加密文件成功",2);
}catch(FileNotFoundException e){lp2.setText("error:file not found!");e.printStackTrace();}
catch(IOException e){lp2.setText("error:input or output fault!");e.printStackTrace();}
catch(NullPointerException e){lp2.setText("error:password not input!");e.printStackTrace();}
catch(Exception e){lp2.setText("unknown error!")/*隐藏提示*/;e.printStackTrace();}
return 1;
}
//解密算法
public int JM(int n){
fd =new FileDialog(f,"打开解密文件",FileDialog.LOAD);
fd.setVisible(true);
fd.setFilenameFilter(null);
String fname=fd.getFile();
String fdir=fd.getDirectory();
if(fname == null){
lp2.setText("未选择文件!");
return 0;
}
String str=fdir + "\\" + fname;// 文件绝对路径
lp2.setText("准备为您解密文件: "+fname+" 文件大小为:"+new File(str).length()+"字节");
try {
String strpw=JOptionPane.showInputDialog(null,"请正确输入加密时的密码","输入密码",1);
char[] password =strpw.toCharArray(); //密码
if(isArrayOutOfBounds(password)){ //检测密码范围
lp2.setText("error: 密码长度超出范围!");
return 0;
}
FileInputStream fin=new FileInputStream(str);//打开文件输入流
BufferedInputStream bufin = new BufferedInputStream(fin,4096); //使用缓冲流
DataInputStream din = new DataInputStream(bufin);
String out_name;
out_name=JOptionPane.showInputDialog(null,"请输入解密后的完整文件名(包括后缀名,如*.txt,*.doc)");
//判断是否输入文件名
if(!isFile_name(out_name)){
lp2.setText("error:请输入文件名!");
return 0;
}
if(new File(fdir+out_name).exists()){
lp2.setText("文件:"+out_name+" 已经存在!");
return 0;
}
FileOutputStream fout=new FileOutputStream(fdir+out_name);
BufferedOutputStream bufout = new BufferedOutputStream(fout,4096);//使用缓冲流
DataOutputStream dout = new DataOutputStream(bufout);
lp2.setText("解密文件"+fname+"中,所用时间可能会有点长,请耐心等待.....");
long time1 = System.currentTimeMillis();//开始计时
int i = runJM(din,dout,password);
long time2 = System.currentTimeMillis();//结束计时
//关闭流
fin.close();
din.close();
fout.close();
dout.close();
i *=4;//总字节数(1 int =4 byte)
time2 -= time1;
lp2.setText(" 解密总"+i+"个字节,平均解密速度:"+(i/time2)+"字节/秒"); //完成提示
String strSucce="文件 '"+fname+"' 解密成功,请留意 '"+fdir+"' 目录下的文件'"+out_name+"',总共用时:"+time2+"毫秒";
JOptionPane.showMessageDialog(null,strSucce,"文件解密成功",2);
}catch(FileNotFoundException e){lp2.setText("error:file not found!");e.printStackTrace();}
catch(IOException e){lp2.setText("error:input or output fault!");e.printStackTrace();}
catch(NullPointerException e){lp2.setText("error:password not input!");e.printStackTrace();}
catch(Exception e){lp2.setText("unknown error!")/*隐藏提示*/;e.printStackTrace();}
return 1;
}
//判断密码长度是否超出范围
public boolean isArrayOutOfBounds(char[] pw){
if(pw.length>=size)
return true; //超出范围
return false;
}
//判断是否输入文件名
public boolean isFile_name(String out_name){
if(out_name==null||out_name.equals(""))
return false;
return true;
}
//加解密进行函数
public int runJM(DataInputStream din,DataOutputStream dout,char []password) throws IOException{
int i=0,read=0;
int len=password.length; //得到密码长度
while((read=din.read())!=-1){
read=read^password[i%len]; //循环用密码与文件异或加密或解密
dout.write(read);
i++;
}
dout.flush(); //清空流
return i; //返回字节数
}
//主函数
public static void main(String args[]){
new Main();
}
}
发表评论
-
2011年春季消费者行为分析1
2012-01-20 11:28 15852011年春季消费者行为分析1 2011年04月21日 ... -
八年级英语外研版下第二学期英语阶段测试卷(Module 5)
2012-01-20 11:28 657八年级英语外研版下第二学期英语阶段测试卷(Module 5) ... -
关于……留着以后用
2012-01-20 11:28 547关于……留着以后用 57 ... -
Hypertable 简介 (一个 C++ 的Bigtable开源实现)
2012-01-20 11:28 737Hypertable 简介 (一个 C++ 的Bigtable ... -
[转载]生命科学谁领风骚?刘实世界第一的重大发现
2012-01-20 11:27 568[转载]生命科学谁领风骚?刘实世界第一的重大发现 12小时前 ... -
【转】 (原创)用PHP和MySQL编一个网页计数器
2012-01-19 16:07 970【转】 (原创)用PHP和MySQL编一个网页计数器 201 ... -
Memcached 协议 中英文对照(一)
2012-01-19 16:07 550Memcached 协议 中英文对 ... -
Linux PowerPC I2C驱动之 I2C设备层的注册过程
2012-01-19 16:07 1011Linux PowerPC I2C驱动之 I2C设备层的注册过 ... -
herve leger sale grj lkh rndm eba
2012-01-19 16:07 500herve leger sale grj lkh rndm e ... -
2011-9-7
2012-01-17 05:58 5172011-9-7 2011年09月07日 国税总局:9月 ... -
贾樟柯赵涛宣布结婚:8月已领证 威尼斯拍婚照
2012-01-17 05:58 608贾樟柯赵涛宣布结婚:8 ... -
2011-9-12
2012-01-17 05:58 6882011-9-12 2011年09月12日 THUGST ... -
男子应聘被老板骗至医院迷昏割肾1
2012-01-17 05:58 608男子应聘被老板骗至医院迷昏割肾1 2011年09月21日 ... -
男子应聘被老板骗至医院迷昏割肾2
2012-01-17 05:58 485男子应聘被老板骗至医 ... -
中秋节
2012-01-16 04:45 503中秋节 2011年12月06日 中秋 ... -
外仁内圣,以借得天下,以情御英雄
2012-01-16 04:45 940外仁内圣,以借得天下,以情御英雄 2011年12月09日 ... -
说"书"
2012-01-16 04:45 424说"书" 2011年12月11日 ... -
春秋战国时期私学的发展
2012-01-16 04:45 1336春秋战国时期私学的发展 2011年12月08日 ... -
子微枯稿
2012-01-16 04:45 558子微枯稿 2011年11月28日 《愁何》 其一 ...
相关推荐
可自己输入密钥进入字符串加密,文件加密,任意文件都可以,加密后用相同的密钥可还原。
微信小程序 RSA加解密 详细用法源码 RSA密钥注意PKCS#8和PKCS#1
加解密小程序,是我从很久以前贴吧找到的,可以实现多种密码学的加解密,很适合自己用。
就是把一段值加密一下,有需要再还原,也是可能用的上,因为像MD5加密后,想再取回密码就不行了
微信小程序 对称加密 AES ECB base64 加密解密 真实项目可用
微信小程序通用实现MD5,AES(EBC)加解密,已用于项目 AES加密 ECB模式 可无IV(16位)
des加密解密的cs程序 方便对字符串进行加密和解密
cbs加密解密 php加密解密小程序 微信小程序 demo
基于JAVA-gui的文本加解密小程序源码 本项目一共有四个类文件 第一个类文件是Mainpanel.java,实现主界面的绘制,用户输入或打开文本,显示执行结果,选择加解密算法以及保存文件的功能。 第二个类文件是Conversion....
MFC加密解密小程序
微信小程序base64加解密的js 和使用方法
这是一款使用C语言开发的用于文字信息的加密与解密的小程序,压缩包里有一个可以直接运行的扩展名为.exe的应用程序以及一个包含整个C语言项目的文件夹。加密与解密的原理简单且极其容易实现,本人博客《C语言文字...
文件加密解密 文件切割工具 等许多 文件加密解密 文件切割工具文件加密解密 文件切割工具文件加密解密 文件切割工具文件加密解密 文件切割工具文件加密解密 文件切割工具
采用AES加密算法制作的加解密小程序,可以加密文本,用于文本文件、文本内容的加解密。
加密解密小程序,异或运算,没有界面 java
DES加密解密程序的C源码.喜欢就下~~~
自己编写的,应用Java的有界面的加密解密程序,可以在窗口中填写要加密的信息,点击加密按钮进行加密,密文在右侧窗口可以看到
主要是个人用来加密自己的代码的。现在不支持AES和DES加密,加密时逐个字节从磁盘读取,然后作一定变换后存储到新文件中。所以加密速度比较慢。由于一般程序的代码量比较小,所以暂时不去改进。
加密解密使用方法详见我的博客文章:https://blog.csdn.net/qq_35713752/article/details/82840185
des加解密程序,代码简单易懂