版权声明:本文为博主 [小明同学爱思考] 原创文章,转载请注明出处。 https://blog.csdn.net/sinat_22840937/article/details/79937302
DES
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.Security;
/**
* Data Encryption Standard 数据加密标准
*
* @author liuming
* @create 2018/4/13
*/
public class DES {
private static String srcMsg = "imooc security des";
public static void main(String[] args) {
jdkDES(srcMsg);
bcDES(srcMsg);
}
// JDK默认支持实现
public static void jdkDES(String srcMsg) {
try {
// produce key
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// convert key
DESKeySpec desKeySpec = new DESKeySpec(keyBytes);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
SecretKey convertedSecretKey = secretKeyFactory.generateSecret(desKeySpec);
// encrypt
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertedSecretKey);
byte[] bytes = cipher.doFinal(srcMsg.getBytes());
// output
String encodedMsg = Hex.encodeHexString(bytes);
System.out.println(encodedMsg);
// decrypt
cipher.init(Cipher.DECRYPT_MODE, convertedSecretKey);
bytes = cipher.doFinal(bytes);
// output
System.out.println(new String(bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
// 使用Bouncy Castle实现
public static void bcDES(String srcMsg) {
try {
Security.addProvider(new BouncyCastleProvider());
// produce key
// KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES", "BC");
System.out.println(keyGenerator.getProvider().getInfo());
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// convert key
DESKeySpec desKeySpec = new DESKeySpec(keyBytes);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
SecretKey convertedSecretKey = secretKeyFactory.generateSecret(desKeySpec);
// encrypt
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertedSecretKey);
byte[] bytes = cipher.doFinal(srcMsg.getBytes());
// output
String encodedMsg = Hex.encodeHexString(bytes);
System.out.println(encodedMsg);
// decrypt
cipher.init(Cipher.DECRYPT_MODE, convertedSecretKey);
bytes = cipher.doFinal(bytes);
// output
System.out.println(new String(bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
}
3-DES
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import java.security.SecureRandom;
import java.security.Security;
/**
* Triple DES
*
* @author liuming
* @create 2018/4/13
*/
public class TripleDES {
private static String srcMsg = "imooc security 3des";
public static void main(String[] args) {
jdk3DES(srcMsg);
bc3DES(srcMsg);
}
public static void jdk3DES(String srcMsg) {
try {
// produce key
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
// keyGenerator.init(168); // keysize = 112 or 168
keyGenerator.init(new SecureRandom());
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// convert key
DESedeKeySpec desKeySpec = new DESedeKeySpec(keyBytes);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey convertedSecretKey = secretKeyFactory.generateSecret(desKeySpec);
// encrypt
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertedSecretKey);
byte[] bytes = cipher.doFinal(srcMsg.getBytes());
// output
String encodedMsg = Hex.encodeHexString(bytes);
System.out.println(encodedMsg);
// decrypt
cipher.init(Cipher.DECRYPT_MODE, convertedSecretKey);
bytes = cipher.doFinal(bytes);
// output
System.out.println(new String(bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void bc3DES(String srcMsg) {
try {
Security.addProvider(new BouncyCastleProvider());
// produce key
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede", "BC");
System.out.println(keyGenerator.getProvider().getInfo());
keyGenerator.init(new SecureRandom());
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// convert key
DESedeKeySpec desKeySpec = new DESedeKeySpec(keyBytes);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey convertedSecretKey = secretKeyFactory.generateSecret(desKeySpec);
// encrypt
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertedSecretKey);
byte[] bytes = cipher.doFinal(srcMsg.getBytes());
// output
String encodedMsg = Hex.encodeHexString(bytes);
System.out.println(encodedMsg);
// decrypt
cipher.init(Cipher.DECRYPT_MODE, convertedSecretKey);
bytes = cipher.doFinal(bytes);
// output
System.out.println(new String(bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
}
AES
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
/**
* Advanced Encryption Standard 高级加密标准
*
* @author liuming
* @create 2018/4/13
*/
public class AES {
private static String srcMsg = "imooc security aes";
public static void main(String[] args) {
jdkAES(srcMsg);
bcAES(srcMsg);
}
public static void jdkAES(String srcMsg) {
try {
// produce key
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(new SecureRandom());
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// convert key
Key key = new SecretKeySpec(keyBytes, "AES");
// encrypt
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] bytes = cipher.doFinal(srcMsg.getBytes());
// output
String encodedMsg = Hex.encodeHexString(bytes);
System.out.println(encodedMsg);
// decrypt
cipher.init(Cipher.DECRYPT_MODE, key);
bytes = cipher.doFinal(bytes);
// output
System.out.println(new String(bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void bcAES(String srcMsg) {
try {
Security.addProvider(new BouncyCastleProvider());
// produce key
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES", "BC");
System.out.println(keyGenerator.getProvider().getInfo());
keyGenerator.init(new SecureRandom());
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// convert key
Key key = new SecretKeySpec(keyBytes, "AES");
// encrypt
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] bytes = cipher.doFinal(srcMsg.getBytes());
// output
String encodedMsg = Hex.encodeHexString(bytes);
System.out.println(encodedMsg);
// decrypt
cipher.init(Cipher.DECRYPT_MODE, key);
bytes = cipher.doFinal(bytes);
// output
System.out.println(new String(bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
}
PBE
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
/**
* PBE(Password based encrytion),基于口令加密
*
* @author liuming
* @create 2018/4/13
*/
public class PBE {
private static String srcMsg = "imooc security pbe";
public static void main(String[] args) {
jdkPBE(srcMsg);
bcPBE(srcMsg);
}
public static void jdkPBE(String srcMsg) {
try {
// init salt
SecureRandom secureRandom = new SecureRandom();
byte[] salt = secureRandom.generateSeed(8);
// password and key
String password = "imooc";
PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");
Key key = secretKeyFactory.generateSecret(pbeKeySpec);
// encrypt
PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt, 100);
Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
cipher.init(Cipher.ENCRYPT_MODE, key, pbeParameterSpec);
byte[] bytes = cipher.doFinal(srcMsg.getBytes());
// output
String encodedMsg = Hex.encodeHexString(bytes);
System.out.println(encodedMsg);
// decrypt
cipher.init(Cipher.DECRYPT_MODE, key, pbeParameterSpec);
bytes = cipher.doFinal(bytes);
// output
System.out.println(new String(bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void bcPBE(String srcMsg) {
try {
Security.addProvider(new BouncyCastleProvider());
// init salt
SecureRandom secureRandom = new SecureRandom();
byte[] salt = secureRandom.generateSeed(8);
// password and key
String password = "imooc";
PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBEWITHMD5andDES", "BC");
System.out.println(secretKeyFactory.getProvider().getInfo());
Key key = secretKeyFactory.generateSecret(pbeKeySpec);
// encrypt
PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt, 100);
Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
cipher.init(Cipher.ENCRYPT_MODE, key, pbeParameterSpec);
byte[] bytes = cipher.doFinal(srcMsg.getBytes());
// output
String encodedMsg = Hex.encodeHexString(bytes);
System.out.println(encodedMsg);
// decrypt
cipher.init(Cipher.DECRYPT_MODE, key, pbeParameterSpec);
bytes = cipher.doFinal(bytes);
// output
System.out.println(new String(bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
}