锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.util.Properties;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import javax.crypto.Cipher;
/**
* 瀵規枃浠跺帇緙╁姞瀵?瑙e瘑瑙e帇緙?瀵硅薄綾?br />
*
*/
public class ZipEncrypt {
private static PrivateKey privateKey;
private static PublicKey publicKey;
private static void directoryZip(ZipOutputStream out, File f, String base)
throws Exception {
// 濡傛灉浼犲叆鐨勬槸鐩綍
if (f.isDirectory()) {
File[] fl = f.listFiles();
// 鍒涘緩鍘嬬緝鐨勫瓙鐩綍
out.putNextEntry(new ZipEntry(base + "/"));
if (base.length() == 0) {
base = "";
} else {
base = base + "/";
}
for (int i = 0; i < fl.length; i++) {
directoryZip(out, fl[i], base + fl[i].getName());
}
} else {
// 鎶婂帇緙╂枃浠跺姞鍏ar涓?br />
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
byte[] bb = new byte[2048];
int aa = 0;
while ((aa = in.read(bb)) != -1) {
out.write(bb, 0, aa);
}
in.close();
}
}
/**
* 鍘嬬緝鏂囦歡
* @param zos
* @param file
* @throws Exception
*/
private static void fileZip(ZipOutputStream zos, File file)
throws Exception {
if (file.isFile()) {
zos.putNextEntry(new ZipEntry(file.getName()));
FileInputStream fis = new FileInputStream(file);
byte[] bb = new byte[2048];
int aa = 0;
while ((aa = fis.read(bb)) != -1) {
zos.write(bb, 0, aa);
}
fis.close();
System.out.println(file.getName());
} else {
directoryZip(zos, file, "");
}
}
/**
* 瑙e帇緙╂枃浠?br />
*
* @param zis
* @param file
* @throws Exception
*/
private static void fileUnZip(ZipInputStream zis, File file)
throws Exception {
ZipEntry zip = zis.getNextEntry();
if (zip == null)
return;
String name = zip.getName();
File f = new File(file.getAbsolutePath() + "/" + name);
if (zip.isDirectory()) {
f.mkdirs();
fileUnZip(zis, file);
} else {
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
byte b[] = new byte[2048];
int aa = 0;
while ((aa = zis.read(b)) != -1) {
fos.write(b, 0, aa);
}
fos.close();
fileUnZip(zis, file);
}
}
/**
* 瀵筪irectory鐩綍涓嬬殑鏂囦歡鍘嬬緝錛屼繚瀛樹負鎸囧畾鐨勬枃浠秡ipFile
*
* @param directory
* @param zipFile
*/
private static void zip(String directory, String zipFile) {
try {
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(
zipFile));
fileZip(zos, new File(directory));
zos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 瑙e帇緙╂枃浠秡ipFile淇濆瓨鍦╠irectory鐩綍涓?br />
*
* @param directory
* @param zipFile
*/
private static void unZip(String directory, String zipFile) {
try {
ZipInputStream zis = new ZipInputStream(
new FileInputStream(zipFile));
File f = new File(directory);
f.mkdirs();
fileUnZip(zis, f);
zis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 鏍規嵁key鐨勮礬寰勬枃浠惰幏寰楁寔涔呭寲鎴愭枃浠剁殑key
* <P>
* 渚嬪瓙: RsaEncrypt.getKey("c:/systemkey/private.key");
*
* @param keyPath
* @return
*/
public static Key getKey(String keyPath) throws Exception {
Key key = null;
FileInputStream fis = new FileInputStream(keyPath);
ObjectInputStream ofs = new ObjectInputStream(fis);
key = (Key) ofs.readObject();
return key;
}
/**
* 鎶婃枃浠秙rcFile鍔犲瘑鍚庡瓨鍌ㄤ負destFile
*
* @param srcFile
* @param destFile
*/
private static void encrypt(String srcFile, String destFile, Key privateKey)
throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] b = new byte[53];
while (fis.read(b) != -1) {
fos.write(cipher.doFinal(b));
}
fos.close();
fis.close();
}
/**
* 鎶婃枃浠秙rcFile瑙e瘑鍚庡瓨鍌ㄤ負destFile
*
* @param srcFile
* @param destFile
* @param privateKey
* @throws Exception
*/
private static void decrypt(String srcFile, String destFile, Key privateKey)
throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] b = new byte[64];
while (fis.read(b) != -1) {
fos.write(cipher.doFinal(b));
}
fos.close();
fis.close();
}
/**
* 瀵圭洰褰晄rcFile涓嬬殑鎵鏈夋枃浠剁洰褰曡繘琛屽厛鍘嬬緝鍚庢搷浣?鐒跺悗淇濆瓨涓篸estfile
*
* @param srcFile
* 瑕佹搷浣滅殑鐩綍 濡俢:/test/test
* @param destfile
* 鍘嬬緝鍔犲瘑鍚庡瓨鏀劇殑鏂囦歡鍚?濡俢:/鍔犲瘑鍘嬬緝鏂囦歡.zip
* @param keyfile
* 鍏挜瀛樻斁鍦扮偣
*/
public static void encryptZip(String srcFile, String destfile, String keyfile) throws Exception {
SecureRandom sr = new SecureRandom();
KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");
kg.initialize(512, sr);
//浜х敓鏂板瘑閽ュ
KeyPair kp = kg.generateKeyPair();
//鑾峰緱縐佸寵
ZipEncrypt.privateKey = kp.getPrivate();
//鑾峰緱鍏挜
ZipEncrypt.publicKey = kp.getPublic();
File f = new File(keyfile);
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream dos = new ObjectOutputStream(fos);
dos.writeObject(ZipEncrypt.publicKey);
File temp = new File(UUID.randomUUID().toString() + ".zip");
temp.deleteOnExit();
// 鍏堝帇緙╂枃浠?br />
zip(srcFile, temp.getAbsolutePath());
// 瀵規枃浠跺姞瀵?br />
encrypt(temp.getAbsolutePath(), destfile, privateKey);
temp.delete();
}
/**
* 瀵規枃浠秙rcfile榪涜鍏堣В瀵嗗悗瑙e帇緙?鐒跺悗瑙e帇緙╁埌鐩綍destfile涓?br />
*
* @param srcfile
* 瑕佽В瀵嗗拰瑙e帇緙╃殑鏂囦歡鍚?濡俢:/鐩爣.zip
* @param destfile
* 瑙e帇緙╁悗鐨勭洰褰?濡俢:/abc
* @param publicKey
* 鍏挜
*/
public static void decryptUnzip(String srcfile, String destfile,
Key publicKey) throws Exception {
// 鍏堝鏂囦歡瑙e瘑
File temp = new File(UUID.randomUUID().toString() + ".zip");
temp.deleteOnExit();
decrypt(srcfile, temp.getAbsolutePath(), publicKey);
// 瑙e帇緙?br />
unZip(destfile, temp.getAbsolutePath());
temp.delete();
}
public static void main(String args[]) throws Exception {
File f = new File(".");
Properties prop = new Properties(); ;
FileInputStream fis = new FileInputStream("./conf.properties");
prop.load(fis);
//瑕佸帇緙╃殑鐩綍
String srcPath = prop.getProperty("SRC_PATH");
//鍘嬬緝鍚庣殑瀛樻斁鏂囦歡
String destZip = prop.getProperty("DEST_FILE");
//鍘嬬緝鍔犲瘑鍚庣殑publickey
String keyfile = prop.getProperty("KEY_FILE");
ZipEncrypt.encryptZip(srcPath, destZip,keyfile);
/*瑙e瘑
ZipEncrypt.decryptUnzip("e:/comXXX/comxxxx.zip", "d:/comxxx", ZipEncrypt
.getKey("e:/comXXX/public.key"));
*/
}
}
AES鍘嬬緝鍔犲瘑/瑙e帇緙╄В瀵嗭紝緗戜笂涓鑸敤base64鏉ュbyte[]緙栫爜,鍏跺疄涓嶉渶瑕侊紝鎸囧畾AES/CBC/PKCS5Padding
鏉ユ寚瀹氬姞瀵嗚В瀵嗘椂鍊欎綅鏁頒笉瀵圭殑鎯呭喌涓嬶紝鐢╬kcs5padding鏉ラ檮鍔犱綅鏁幫紝涓嶈繃榪欎釜鏃跺欒瑙e瘑鐨勬枃浠剁殑鏃跺欙紝瑕佸璇?6浣嶇殑楠岃瘉浣嶅氨涓嶄細鎶ュ紓甯?br />
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.security.Key;
import java.security.SecureRandom;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
* 瀵規枃浠跺姞瀵?瑙e瘑鍜屽帇緙?瑙e帇緙╁璞$被
* @author 璧墊垚鏄?br />
*/
public class ZipEncrypt {
private void directoryZip(ZipOutputStream out, File f, String base)
throws Exception {
// 濡傛灉浼犲叆鐨勬槸鐩綍
if (f.isDirectory()) {
File[] fl = f.listFiles();
// 鍒涘緩鍘嬬緝鐨勫瓙鐩綍
out.putNextEntry(new ZipEntry(base + "/"));
if (base.length() == 0) {
base = "";
} else {
base = base + "/";
}
for (int i = 0; i < fl.length; i++) {
directoryZip(out, fl[i], base + fl[i].getName());
}
} else {
// 鎶婂帇緙╂枃浠跺姞鍏ar涓?br />
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
byte[] bb = new byte[2048];
int aa = 0;
while ((aa = in.read(bb)) != -1) {
out.write(bb, 0, aa);
}
in.close();
}
}
/**
* 鍘嬬緝鏂囦歡
* @param zos
* @param file
* @throws Exception
*/
private void fileZip(ZipOutputStream zos, File file)
throws Exception {
if (file.isFile()) {
zos.putNextEntry(new ZipEntry(file.getName()));
FileInputStream fis = new FileInputStream(file);
byte[] bb = new byte[2048];
int aa = 0;
while ((aa = fis.read(bb)) != -1) {
zos.write(bb, 0, aa);
}
fis.close();
System.out.println(file.getName());
} else {
directoryZip(zos, file, "");
}
}
/**
* 瑙e帇緙╂枃浠?br />
*
* @param zis
* @param file
* @throws Exception
*/
private void fileUnZip(ZipInputStream zis, File file)
throws Exception {
ZipEntry zip = zis.getNextEntry();
if (zip == null)
return;
String name = zip.getName();
File f = new File(file.getAbsolutePath() + "/" + name);
if (zip.isDirectory()) {
f.mkdirs();
fileUnZip(zis, file);
} else {
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
byte b[] = new byte[2048];
int aa = 0;
while ((aa = zis.read(b)) != -1) {
fos.write(b, 0, aa);
}
fos.close();
fileUnZip(zis, file);
}
}
/**
* 瀵筪irectory鐩綍涓嬬殑鏂囦歡鍘嬬緝錛屼繚瀛樹負鎸囧畾鐨勬枃浠秡ipFile
*
* @param directory
* @param zipFile
*/
private void zip(String directory, String zipFile) {
try {
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(
zipFile));
fileZip(zos, new File(directory));
zos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 瑙e帇緙╂枃浠秡ipFile淇濆瓨鍦╠irectory鐩綍涓?br />
*
* @param directory
* @param zipFile
*/
private void unZip(String directory, String zipFile) {
try {
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));
File f = new File(directory);
f.mkdirs();
fileUnZip(zis, f);
zis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 鏍規嵁key鐨勮礬寰勬枃浠惰幏寰楁寔涔呭寲鎴愭枃浠剁殑key
* <P>
* 渚嬪瓙: RsaEncrypt.getKey("c:/systemkey/private.key");
*
* @param keyPath
* @return
*/
private Key getKey(String keyPath) throws Exception {
FileInputStream fis = new FileInputStream(keyPath);
byte[] b = new byte[16];
fis.read(b);
SecretKeySpec dks = new SecretKeySpec(b,"AES");
fis.close();
return dks;
}
/**
* 鎶婃枃浠秙rcFile鍔犲瘑鍚庡瓨鍌ㄤ負destFile
*
* @param srcFile
* @param destFile
*/
private void encrypt(String srcFile, String destFile, Key privateKey)
throws Exception {
SecureRandom sr = new SecureRandom();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec spec=new IvParameterSpec(privateKey.getEncoded());
cipher.init(Cipher.ENCRYPT_MODE, privateKey,spec,sr);
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] b = new byte[2048];
while (fis.read(b) != -1) {
fos.write(cipher.doFinal(b));
}
fos.close();
fis.close();
}
/**
* 鎶婃枃浠秙rcFile瑙e瘑鍚庡瓨鍌ㄤ負destFile
*
* @param srcFile
* @param destFile
* @param privateKey
* @throws Exception
*/
private void decrypt(String srcFile, String destFile, Key privateKey)
throws Exception {
SecureRandom sr = new SecureRandom();
Cipher ciphers = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec spec=new IvParameterSpec(privateKey.getEncoded());
ciphers.init(Cipher.DECRYPT_MODE,privateKey,spec,sr);
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] b = new byte[2064];
while (fis.read(b) != -1) {
fos.write(ciphers.doFinal(b));
}
fos.close();
fis.close();
}
/**
* 瀵圭洰褰晄rcFile涓嬬殑鎵鏈夋枃浠剁洰褰曡繘琛屽厛鍘嬬緝鍚庢搷浣?鐒跺悗淇濆瓨涓篸estfile
*
* @param srcFile
* 瑕佹搷浣滅殑鐩綍 濡俢:/test/test
* @param destfile
* 鍘嬬緝鍔犲瘑鍚庡瓨鏀劇殑鏂囦歡鍚?濡俢:/鍔犲瘑鍘嬬緝鏂囦歡.zip
* @param keyfile
* 鍏挜瀛樻斁鍦扮偣
*/
public void encryptZip(String srcFile, String destfile, String keyfile) throws Exception {
SecureRandom sr = new SecureRandom();
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(128,sr);
SecretKey key = kg.generateKey();
File f = new File(keyfile);
if (!f.getParentFile().exists())
f.getParentFile().mkdirs();
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(key.getEncoded());
File temp = new File(UUID.randomUUID().toString() + ".zip");
temp.deleteOnExit();
// 鍏堝帇緙╂枃浠?br />
zip(srcFile, temp.getAbsolutePath());
// 瀵規枃浠跺姞瀵?br />
encrypt(temp.getAbsolutePath(), destfile, key);
temp.delete();
}
/**
* 瀵規枃浠秙rcfile榪涜鍏堣В瀵嗗悗瑙e帇緙?鐒跺悗瑙e帇緙╁埌鐩綍destfile涓?br />
*
* @param srcfile
* 瑕佽В瀵嗗拰瑙e帇緙╃殑鏂囦歡鍚?濡俢:/鐩爣.zip
* @param destfile
* 瑙e帇緙╁悗鐨勭洰褰?濡俢:/abc
* @param publicKey
* 鍏挜
*/
public void decryptUnzip(String srcfile, String destfile,
String keyfile) throws Exception {
// 鍏堝鏂囦歡瑙e瘑
File temp = new File(UUID.randomUUID().toString() + ".zip");
temp.deleteOnExit();
decrypt(srcfile, temp.getAbsolutePath(), this.getKey(keyfile));
// 瑙e帇緙?br />
unZip(destfile, temp.getAbsolutePath());
temp.delete();
}
public static void main(String args[]) throws Exception {
long a = System.currentTimeMillis();
new ZipEncrypt().encryptZip("e:/com", "e:/comXXX/page.zip","e:/comXXX/public.key");
System.out.println(System.currentTimeMillis()-a);
a = System.currentTimeMillis();
new ZipEncrypt().decryptUnzip("e:/comXXX/page.zip", "e:/comxxx", "e:/comXXX/public.key");
System.out.println(System.currentTimeMillis()-a);
}
}
import javax.crypto.Cipher;
public class RsaTest {
public static void main(String args[]) throws Exception {
SecureRandom sr = new SecureRandom();
KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");
kg.initialize(512, sr);
//浜х敓鏂板瘑閽ュ
KeyPair kp = kg.generateKeyPair();
//鑾峰緱縐佸寵
PrivateKey prk = kp.getPrivate();
//鑾峰緱鍏挜
PublicKey puk = kp.getPublic();
String str = "浣犲ソ鍚?鎴戝湪嫻嬭瘯RSA嫻嬭瘯^_^";
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, prk);
byte[] dest = cipher.doFinal(str.getBytes());
System.out.println(new String(dest));
Cipher ciphers = Cipher.getInstance("RSA");
ciphers.init(Cipher.DECRYPT_MODE,puk);
byte[] srcs = ciphers.doFinal(dest);
System.out.println("瑙e瘑鍚庣殑鏁版嵁:"+new String(srcs));
}
}
public class RsaTest {
public static void main(String args[]) throws Exception {
SecureRandom sr = new SecureRandom();
KeyPairGenerator kg = KeyPairGenerator.getInstance("DSA");
kg.initialize(512, sr);
//浜х敓鏂板瘑閽ュ
KeyPair kp = kg.generateKeyPair();
//鑾峰緱縐佸寵
PrivateKey prk = kp.getPrivate();
//鑾峰緱鍏挜
PublicKey puk = kp.getPublic();
//榪斿洖涓涓寚瀹氱畻娉曠殑Signature瀵硅薄
Signature signature = Signature.getInstance("DSA");
signature.initSign(prk);
String str = "浣犲ソ鍚?鎴戝湪嫻嬭瘯RSA嫻嬭瘯^_^浣犲ソ鍚?鎴戝湪嫻嬭瘯RSA嫻嬭瘯^_^浣犲ソ鍚?鎴戝湪嫻嬭瘯RSA嫻嬭瘯^_^浣犲ソ鍚?鎴戝湪嫻嬭瘯RSA嫻嬭瘯^_^";
signature.update(str.getBytes());
byte[] dest = signature.sign();
System.out.println("Enc:"+new String(dest));
Signature signature2 = Signature.getInstance("DSA");
signature2.initVerify(puk);
signature2.update(str.getBytes());
System.out.println(signature2.verify(dest));
}
}
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class JcaTest {
public static void main(String args[]) throws Exception {
SecureRandom sr = new SecureRandom();
KeyGenerator kg = KeyGenerator.getInstance("DES");
kg.init(sr);
SecretKey key = kg.generateKey();
// 鑾峰緱瀵嗗寵鏁版嵁
byte rawKeyData[] = key.getEncoded();
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key, sr);
String src = "浣犲ソ鍚楁祴璇曞姞瀵?;
byte[] dest = cipher.doFinal(src.getBytes());
System.out.println("鍔犲瘑鍚庣殑鏁版嵁:"+new String(dest));
// 瑙e瘑 浠庡師濮嬪瘑鍖欐暟鎹垱寤轟竴涓狣ESKeySpec瀵硅薄
sr = new SecureRandom();
DESKeySpec dks = new DESKeySpec(rawKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey keys = keyFactory.generateSecret(dks);
Cipher ciphers = Cipher.getInstance("DES");
ciphers.init( Cipher.DECRYPT_MODE,keys,sr);
byte[] srcs = ciphers.doFinal(dest);
System.out.println("瑙e瘑鍚庣殑鏁版嵁:"+new String(srcs));
}
}