package com.happy.security.properties;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
public class DESEncryptUtil {
public static Key createKey() throws NoSuchAlgorithmException {//创建密钥
Security.insertProviderAt(new com.sun.crypto.provider.SunJCE(), 1);
KeyGenerator generator = KeyGenerator.getInstance("DES");
generator.init(new SecureRandom());
Key key = generator.generateKey();
return key;
}
public static Key getKey(InputStream is) {
try {
ObjectInputStream ois = new ObjectInputStream(is);
return (Key) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
private static byte[] doEncrypt(Key key, byte[] data) {//对数据进行加密?
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] raw = cipher.doFinal(data);
return raw;
public static InputStream doDecrypt(Key key, InputStream in) {//对数据进行解密?
cipher.init(Cipher.DECRYPT_MODE, key);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
int count = 0;
while ((count = in.read(tmpbuf)) != -1) {
bout.write(tmpbuf, 0, count);
in.close();
byte[] orgData = bout.toByteArray();
byte[] raw = cipher.doFinal(orgData);
ByteArrayInputStream bin = new ByteArrayInputStream(raw);
return bin;
} catch (Exception e){
public static void main(String[] args) throws Exception{
System.out.println("===================");
Key key = DESEncryptUtil.createKey();
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(args[1]));
oos.writeObject(key);
oos.close();
System.out.println("成功生成密钥文件");
File file = new File(args[1]);
FileInputStream in = new FileInputStream(file);
while ((count = in.read(tmpbuf)) != -1){
byte[] raw = DESEncryptUtil.doEncrypt(key, orgData);
file = new File(file.getParent() + "\\en_" + file.getName());
FileOutputStream out = new FileOutputStream(file);
out.write(raw);
out.close();
System.out.println("成功加密,加密文件位:"+file.getAbsolutePath());
FileInputStream fis = new FileInputStream(file);
InputStream raw = DESEncryptUtil.doDecrypt(key, fis);
while ((count = raw.read(tmpbuf)) != -1){
raw.close();
file = new File(file.getParent() + "\\rs_" + file.getName());
FileOutputStream fos = new FileOutputStream(file);
fos.write(orgData);
System.out.println("成功解密,解密文件位:"+file.getAbsolutePath());
}else if(args.length==1 args[0].equals("-h")) {
System.out.println("\t文件加密解密\n");
System.out.println
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
说明:文件加密
加密方法:三重DES加密
加密过程:对选中的文件加密后在同文件夹下生成一个增加了".tdes"
扩展名的加密文件
解密过程:对选中的加密文件(必须有".tdes"扩展名)进行解密
*/
public class FileEncrypter extends JFrame{
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.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(){
decrypt(file.getAbsoluteFile(),pp.getKey());
加密函数
输入:
其中:
输出:
对输入的文件加密后,保存到同一文件夹下增加了".tdes"扩展名的文件中.
private void encrypt(File fileIn,String sKey){
try{
FileInputStream fis = new FileInputStream(fileIn);
byte[] bytIn = new byte[(int)fileIn.length()];
for(int i = 0;iFILEIN.LENGTH();I++){
bytIn[i] = (byte)fis.read();
//加密
byte[] bytOut = encryptByDES(encryptByDES(
String fileOut = fileIn.getPath() + ".tdes";
FileOutputStream fos = new FileOutputStream(fileOut);
for(int i = 0;iBYTOUT.LENGTH;I++){
fos.write((int)bytOut[i]);
fos.close();
this,"加密成功!","提示",JOptionPane.OK_OPTION);
}else
}catch(Exception e){
解密函数
对输入的文件解密后,保存到用户指定的文件中.
private void decrypt(File fileIn,String sKey){
String strPath = fileIn.getPath();
else{
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[] bytOut = decryptByDES(decryptByDES(
File fileOut = chooser.getSelectedFile();
fileOut.createNewFile();
this,"解密成功!","提示",JOptionPane.OK_OPTION);
this,"解密失败,请核对密码!","提示",JOptionPane.OK_OPTION);
用DES方法加密输入的字节
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方法解密输入的字节
private byte[] decryptByDES(byte[] bytE,byte[] bytKey) throws Exception{
cip.init(Cipher.DECRYPT_MODE,sk);
return cip.doFinal(bytE);
输入密码的字符形式,返回字节数组形式.
private byte[] getKeyByStr(String str){
for(int i=0;iSTR.LENGTH()
Integer itg =
bRet[i] = itg.byteValue();
return bRet;
输入: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=="A".charAt(0)) iRet = 10;
if(chr=="B".charAt(0)) iRet = 11;
return iRet;
文件选择组件.
class FilePanel extends JPanel{
FilePanel(String str){
JLabel label = new JLabel(str);
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;
int ret = chooser.showOpenDialog(cmpt);
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){
JButton chooseButton = new JButton("随机产生");
public String getKey(){
KeyGenerator kg = KeyGenerator.getInstance("DES");
Key ke = kg.generateKey();
byte[] bytK1 = ke.getEncoded();
ke = kg.generateKey();
private String getByteStr(byte[] byt){
String strRet = "";
for(int i=0;iBYT.LENGTH;I++){
//System.out.println(byt[i]);
return strRet;
private String getHexValue(int s){
String sRet=null;
switch (s){
case 0: sRet = "0";break;
case 1: sRet = "1";break;
case 10: sRet = "A";break;
case 11: sRet = "B";break;
return sRet;
package com.ncs.pki.util;
import java.security.MessageDigest;
private static MessageDigest digest = null;
public synchronized static final String hash(String data) {
if (digest == null) {
} catch (NoSuchAlgorithmException nsae) {
System.err.println(
+ "Jive will be unable to function normally.");
nsae.printStackTrace();
// Now, compute hash.
digest.update(data.getBytes());
return encodeHex(digest.digest());
public static final String encodeHex(byte[] bytes) {
int i;
for (i = 0; i bytes.length; i++) {
if (((int) bytes[i] 0xff) 0x10) {
buf.append("0");
return buf.toString();
public static String test(){
return null;
* @param args
public static void main(String[] args) {
// TODO Auto-generated method stub
public class DesEncrypt {
*
* 使用DES加密与解密,可对byte[],String类型进行加密与解密 密文可使用String,byte[]存储.
* 方法: void getKey(String strKey)从strKey的字条生成一个Key
* String getEncString(String strMing)对strMing进行加密,返回String密文 String
* getDesString(String strMi)对strMin进行解密,返回String明文
*byte[] getEncCode(byte[] byteS)byte[]型的加密 byte[] getDesCode(byte[]
* byteD)byte[]型的解密
Key key;
* 根据参数生成KEY
* @param strKey
public void getKey(String strKey) {
KeyGenerator _generator = KeyGenerator.getInstance("DES");
_generator.init(new SecureRandom(strKey.getBytes()));
this.key = _generator.generateKey();
_generator = null;
* 加密String明文输入,String密文输出
* @param strMing
* @return
public String getEncString(String strMing) {
byte[] byteMi = null;
byte[] byteMing = null;
String strMi = "";
byteMi = this.getEncCode(byteMing);
} finally {
byteMing = null;
byteMi = null;
return strMi;
* 解密 以String密文输入,String明文输出
* @param strMi
public String getDesString(String strMi) {
String strMing = "";
byteMing = this.getDesCode(byteMi);
return strMing;
* 加密以byte[]明文输入,byte[]密文输出
* @param byteS
private byte[] getEncCode(byte[] byteS) {
byte[] byteFina = null;
Cipher cipher;
cipher = Cipher.getInstance("DES");
byteFina = cipher.doFinal(byteS);
cipher = null;
return byteFina;
* 解密以byte[]密文输入,以byte[]明文输出
* @param byteD
private byte[] getDesCode(byte[] byteD) {
byteFina = cipher.doFinal(byteD);
System.out.println("des demo");
DesEncrypt des = new DesEncrypt();// 实例化一个对像
des.getKey("MYKEY");// 生成密匙
System.out.println("key=MYKEY");
String strEnc = des.getEncString("111111");// 加密字符串,返回String的密文
System.out.println("密文=" + strEnc);
String strDes = des.getDesString(strEnc);// 把String 类型的密文解密
System.out.println("明文=" + strDes);
以上就是土嘎嘎小编为大家整理的java文件加密代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!