java手机文件夹加密软件
‘壹’ 使用java做一个加密和隐藏文件的软件,具体需要怎么做求指导
不知道你打算怎么加密呢?隐藏又是什么意思?是将多个文件合成一个吗?
因为从操作系统层面来说理应能看到所有合法的文件,因此想要让操作系统都看不到基本上是不可能的(何况Java也是用的操作系统API来实现对文件的操作)。
就加密我说说我的想法吧,首先需要一个加密的算法。这个算法需要满足:算法可逆,双向计算复杂度(时间/空间)低,安全程度高,可靠性高。另外可以考虑并行化来增加性能,因为现在的文件系统大多比较大,管理的东西都不小。
如果能找到这样一个算法,可以对于文件使用二进制的读写(Binary I/O),然后每读到一定大小的数据就进行加密运算,并写入目标加密文件中。如果是解密则是读取数据进行解密运算。
题外话:我觉得实际上做这样一个软件也没有必要,每次存取文件都需要进行大量的计算操作,也很容易破坏cache的局部性原理。如果真的需要对一部分文件进行加密,也有很多现成的工具可用,甚至于是说现在的压缩文件都可以带上密码加密。所以我认为这个软件的前景不大,当然如果只是用来玩一玩也是可以的,只不过算法比较难找而已。(如果用RSA这种级别的算法估计也行的吧……)
‘贰’ 怎样用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位的密码)如:
其中:
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;i<fileIn.length();i++){
bytIn[i] = (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;i<bytOut.length;i++){
fos.write((int)bytOut[i]);
}
fos.close();
JOptionPane.showMessageDialog(
this,"加密成功!","提示",JOptionPane.OK_OPTION);
}else
JOptionPane.showMessageDialog(
this,"密码长度必须等于48!","错误信息",JOptionPane.ERROR_MESSAGE);
}catch(Exception e){
e.printStackTrace();
}
}
/**
解密函数
输入:
要解密的文件,密码(由0-F组成,共48个字符,表示3个8位的密码)如:
其中:
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;i<fileIn.length();i++){
bytIn[i] = (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;i<bytOut.length;i++){
fos.write((int)bytOut[i]);
}
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 byte[str.length()/2];
for(int i=0;i<str.length()/2;i++){
Integer itg =
new Integer(16*getChrInt(str.charAt(2*i)) + getChrInt(str.charAt(2*i+1)));
bRet[i] = 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)cmpt;
JTextField jtf = (JTextField)jp.getComponent(1);
jtf.setText(getByteStr(bytK1)+getByteStr(bytK2)+getByteStr(bytK3));
}catch(Exception e){
e.printStackTrace();
}
}
private String getByteStr(byte[] byt){
String strRet = "";
for(int i=0;i<byt.length;i++){
//System.out.println(byt[i]);
strRet += getHexValue((byt[i]&240)/16);
strRet += getHexValue(byt[i]&15);
}
return strRet;
}
private String getHexValue(int s){
String sRet=null;
switch (s){
case 0: sRet = "0";break;
case 1: sRet = "1";break;
case 2: sRet = "2";break;
case 3: sRet = "3";break;
case 4: sRet = "4";break;
case 5: sRet = "5";break;
case 6: sRet = "6";break;
case 7: sRet = "7";break;
case 8: sRet = "8";break;
case 9: sRet = "9";break;
case 10: sRet = "A";break;
case 11: sRet = "B";break;
case 12: sRet = "C";break;
case 13: sRet = "D";break;
case 14: sRet = "E";break;
case 15: sRet = "F";
}
return sRet;
}
private Component cmpt;
}
}
‘叁’ 有没有不错的加密软件就是可以让文件发不出去
合力天下数据防泄密系统(HL-dataAS)用于保护企业的知识产权、客户资料、财务数据、技术图纸、应用系统等机密信息化数据不外泄。简单地说,”合力天下”防泄密系统让企业机密数据和应用系统的重要资料“拷不走”、“屏幕截取不走”、“另存不走”、“打印不走”、“内容复制不走”、“MSN、QQ、邮件发送不走”。
一、支持各种文件格式加密(CAD、OFFICE、PDF、图纸、计算机程序、课件、游戏动画、数码照片、视频..),用户也可以根据自己的需要定制;支持出差人员管理;支持文档外发管理;防止涉密文档非法扩散。支持控制台审批解密,支持手机审批解密。灵活的权限控制:只读,可写,可编辑,禁止删除;屏幕水印,图纸水印,打印水印、禁止拍照等。
二、支持局域网部署和互联网部署模式,支持总部和异地分支机构分别昌宴团部署;支持单机部署模式;确保公司内部资料的相互流通。
三、支持各种应用系统:支持基于Windows的B/S、C/S的各种业务应用软件加密,如PDM、PLM、ERP、OA、CRM、CAM、HR、采编软件、流程管理软件、电子商务软件、财务软件、文档管理系统、网站服耐橘务器、云服务器、企业网盘、手机终端等。
四、支持任意格式文档类型:Office、Openoffice、Wps、PDF、outlook、FOXMAIL、ARM、ANSYS、Easypro、OA系统、ERP、MSVISIO、AutoCAD、AutodeskInveator、Autovue、ACDSee、Pro/E、Inventor、CAXA、CAJviewer、Protel、PReS、Keil、Quartus、AVRStudio、ARMStudio、SiemensWi、Xtcapp55、TurboCAD、开目CAD、TwinCAD、CATIA、SolidEdge、UG、PowerDraft、Photoline、清华天河CAD、中望CAD、英泰CAD、浩辰CAD、凯思CAD、JEwelCAD、CodeWright、ULTRAEdit、Solidworks、SVN、ZDDS、IAR、、FPWINGR、FX-PCS-DU-WIN-C、FXGPWIN、PhptoShop、DreamWeaver、MTcardEdit、CorelDraw、Fireworks、Flash、ACDSee、ZineMarker、HITACHIEmbeddedworkshop、HIGH-PerformanceEmbeddedworkshop、Embeddedworkshop、CAM350、Matlab、Labview、Illustrator、MAYA、3DMAX、unity、realplay、mediaplayer、Cakewalk、Flash、LRCEditor、Lightscape、BeyondCompare、Java、Delphi、VS.Net、C、VB、VC、C、Java虚拟机、SourceInsight、祥棚WINRAR、EDITplus、IBMClearCase、、PowerPCB、Powerlogic、Powermill、数控传输软件、视频文件、编程ICC、打标机(票据打印)、CAMtastic、DELcam-Exchange、cimatron、Macrumedia、Microchip、MasterCAM、FastCAM、MyEclipse、Eclipse、Tomcat、MultiGenCreator、FoxPro、Aess、MSSQL、Oracle、WinMerge、XOREAX、InCrediBuid、ZBrush3、JDPaint、BodyPaint3D、英泰PDM、NTKO、KASS、WINRAR、SILKROAD、ETMARK、海康威视监控视频、邮箱大师、安卓手机、苹果手机等各种文档格式,即可自定义加密任意文件格式。
五、支持以下操作系统(32位64位):
WindowsXP、2003、2008、2012、win7、win8、win10;LINUX系统;苹果MACOS系统;安卓(Android)系统,苹果IOS系统。
六、支持中文、英文、俄、日文、德文、韩文、法文、西班牙文等各种语言网络环境,支持中文、英文、俄、日文、德文、韩文、法文、西班牙文等各种语言文档加密。
七、合力天下数据防泄密系统按功能分为以下版本:租用版,普及版,企业版,专业版,行业版,源码版,OEM版,旗舰版。可以满足国内各类企事业、设计院所、政府机关单位部署。
‘肆’ Java写一个加密文件或者文件夹的软件
这个用Java和C#来做估计不太合适,我只能给你提供思路,思路一,HookAPI的CreateProcess和ShellExecute这类打开文件的API函数,然后获得
打开的文件路径,然后判定这个文件是否在你的加密数据库中,如果是加密文件,则弹出密码框要求输入密码才能进入,这个程序需要做成一个常住
后台运行的。思路二写驱动,这样可以控制的很好。思路三,伪加密,这个貌似以前多数的加密软件都是此类模式,就是使用一些系统的属性将文件
移动到其他位置或者修改属性进行DOS模式类的隐藏,然后处理的。