1.DESede加解密:
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
/**
* 对称加密与解密
* @author Administrator
*
*/
public class EncryptData {
//要加密的明文
static String str = "123456adasdadqsadqweds7890";
public static void main(String[] args) {
System.out.println("明文:"+str);
try {
//指定编码特征为utf-8
byte[] plain1 = str.getBytes("UTF-8");
//创建密钥生成器 加密算法为DESede
KeyGenerator generator = KeyGenerator.getInstance("DESede");
generator.init(168);
//获得密钥
SecretKey secretKey = generator.generateKey();
//获取密钥的二进制编码格式
byte[] kb = secretKey.getEncoded();
System.out.println("密钥:");
//打印密钥 每行8个
for (int j = 0; j < kb.length; j++) {
System.out.print(kb[j]+",");
if(j%8==7) System.out.println();
}
//创建加密对象,加密算法DESede
Cipher cipher = Cipher.getInstance("DESede");
//加密对象初始化
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
//密文存放在字节数组中
byte[] encrypt = cipher.doFinal(plain1);
System.out.println("密文:");
//打印密文
for (int j = 0; j < encrypt.length; j++) {
System.out.print(encrypt[j]+",");
if(j%8==7) System.out.println();
}
//切换解密模式
cipher.init(Cipher.DECRYPT_MODE, secretKey);
//解密数组
byte[] cs = cipher.doFinal(encrypt);
String data = new String(cs);
System.out.println("解密:"+data);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
}
}
2。RSA加解密
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
public class RSAEncrypt {
public static void main(String[] args) {
try {
//创建密钥生成器,加密算法为RSA
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
//初始化密钥对象,RAS密钥长度为510-2048
generator.initialize(1024);
//生成密钥对
KeyPair keyPair = generator.genKeyPair();
//获取公钥
PublicKey pbk = keyPair.getPublic();
//获取私钥
PrivateKey prk = keyPair.getPrivate();
//建立文件输出流 保存公钥
FileOutputStream fileOutputStream = new FileOutputStream("d:\\key.dat");
//文件对象输出流
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
//向文件key.dat中输出对象
objectOutputStream.writeObject(pbk);
//建立文件输出流 保存私钥
FileOutputStream fout = new FileOutputStream("d:\\key.dat");
//文件对象输出流
ObjectOutputStream objectOutputStream2 = new ObjectOutputStream(fout);
objectOutputStream2.writeObject(prk);
//获得公钥,计算指数和模数
RSAPublicKey pkey = (RSAPublicKey) keyPair.getPublic();
BigInteger in = pkey.getPublicExponent();
BigInteger en = pkey.getModulus();
//明文
String pltext = "I hava e friend";
byte[] pb = pltext.getBytes("UTF-8");
BigInteger bigInteger = new BigInteger(pb);
//执行加密
BigInteger bp = bigInteger.modPow(in, en);
//输出密文
System.out.println("bi:"+bp);
//获取私钥以及解密
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
BigInteger nv = privateKey.getPrivateExponent();
BigInteger mv = privateKey.getModulus();
//执行解密
BigInteger bi = bp.modPow(nv, mv);
//打印明文
byte[] mt = bi.toByteArray();
for (int i = 0; i < mt.length; i++) {
System.out.print((char)mt[i]);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}