import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Administrator
*/
public class GenKey {
public static void main(String[] args){//生成密钥
//将密钥保存在文件中
try {
KeyGenerator keyGen = KeyGenerator.getInstance("DESede");
//初始化密钥生成器
keyGen.init(168);
//生成密钥
SecretKey key = keyGen.generateKey(); //以二进制文件流形式存储
//将密钥保存在文件中
FileOutputStream f = new FileOutputStream("key3.dat");
ObjectOutputStream b = new ObjectOutputStream(f);
b.writeObject(key);
f.close();
b.close();
} catch (Exception ex) {
Logger.getLogger(GenKey.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cipherinputstream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.security.Key;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
/**
*
* @author Administrator
*/
public class EncryptAndDecrypt {
public static void main(String[] args){
//要用作加密或解密的文件名
String dataFileName=args[0];
//是区分是加密还是解密,加密为encrypt,解密为decrypt
String opMode=args[1];
//密钥存放的文件名
String keyFileName="key.dat";
try {
//生成密钥
FileInputStream keyFIS = new FileInputStream(keyFileName);
ObjectInputStream OIS=new ObjectInputStream(keyFIS);
Key key=(Key)OIS.readObject();
//创建并初始化密码器
Cipher cp=Cipher.getInstance("DESede");
if(opMode.equalsIgnoreCase("encrypt")){
cp.init(Cipher.ENCRYPT_MODE, key);
}
else if(opMode.equalsIgnoreCase("decrypt")){
cp.init(Cipher.DECRYPT_MODE, key);
}
else return;
//创建CipherInputStream对象
FileInputStream dataFIS=new FileInputStream(dataFileName);
CipherInputStream CIS=new CipherInputStream(dataFIS,cp);
//如果是加密操作
if(opMode.equalsIgnoreCase("encrypt")){
//建立文件输出流
FileOutputStream FOS=new FileOutputStream("mi.txt");
int b=0;
System.out.print("加密后的密文是:");
while((b=CIS.read())!=-1){
System.out.print((char)b);
FOS.write((byte)b);
}
System.out.println("/n密文已经写到文件里。");
}
else{//如果是解密操作
int b=0;
FileOutputStream FOS=new FileOutputStream("jiemi.txt");
System.out.print("解密后的明文是:");
while((b=CIS.read())!=-1){
FOS.write(b);//写入文件中
}
}
} catch (Exception ex) {
Logger.getLogger(EncryptAndDecrypt.class.getName()).log(Level.SEVERE, null, ex);
}
}
}