package com.cit.webservice;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
public class DESCipherUtil {
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);
}
}
public static Cipher getCipher(Key key,int mode) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException{
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(mode, key);
System.out.println(mode);
return cipher;
}
public static void decrypt(InputStream is ,OutputStream os, Key key) throws IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException{
byte[] buff = new byte[1024];
int count = 0;
CipherInputStream cis = new CipherInputStream(is,getCipher(key,Cipher.DECRYPT_MODE));
while ((count = cis.read( buff)) >=0) {
os.write( buff, 0, count);
}
cis.close();
os.flush();
}
public static void encrypt(InputStream is ,OutputStream os, Key key) throws IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException{
byte[] buff = new byte[1024];
int count = 0;
CipherOutputStream cos = new CipherOutputStream(os,getCipher(key,Cipher.ENCRYPT_MODE));
while ((count = is.read(buff)) >=0) {
cos.write(buff, 0, count);
}
cos.flush();
cos.close();
}
}