You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
4.2 KiB
Java

/**
*
*/
package com.manage.encrypt;
import java.security.SecureRandom;
import java.security.Security;
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.DESedeKeySpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
/**
* <p>Title:jdkDES </p>
* <p>Description: </p>
* <p>Company: </p>
* @author hu
* @date
*/
public class DES {
private static String src="security";
/**
* DES
*/
public static void jdkDES(){
try {
//生成Key
KeyGenerator keyGeneratro=KeyGenerator.getInstance("DES");
//Key Size
keyGeneratro.init(56);
SecretKey secrekKey=keyGeneratro.generateKey();
byte[] bytesKey=secrekKey.getEncoded();
//Key转换(传入生成的bytesKey)
DESKeySpec desKeySpec=new DESKeySpec(bytesKey);
//factory传入加密方式
SecretKeyFactory factory=SecretKeyFactory.getInstance("DES");
//Key转换生成密钥
SecretKey convertSecretKey=factory.generateSecret(desKeySpec);
//加密DES算法/ECB工作方式/PKCS5Padding填充方式
Cipher cipher=Cipher.getInstance("DES/ECB/PKCS5Padding");
//输入加密模式,密钥
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
//加密,输入要加密的内容
byte[] result=cipher.doFinal(src.getBytes());
System.out.println("jdk des encrypt十六进制:"+result.hashCode());
//解密
cipher.init(cipher.DECRYPT_MODE, convertSecretKey);
result=cipher.doFinal(result);
System.out.println("jek des decrypt:"+new String(result));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* bcDES
*/
public static void bcDES(){
try {
Security.addProvider(new BouncyCastleProvider());
//生成Key
KeyGenerator keyGeneratro=KeyGenerator.getInstance("DES","BC");
keyGeneratro.getProvider();
//Key Size
keyGeneratro.init(56);
SecretKey secrekKey=keyGeneratro.generateKey();
byte[] bytesKey=secrekKey.getEncoded();
//Key转换(传入生成的bytesKey)
DESKeySpec desKeySpec=new DESKeySpec(bytesKey);
//factory传入加密方式
SecretKeyFactory factory=SecretKeyFactory.getInstance("DES");
//Key转换生成密钥
SecretKey convertSecretKey=factory.generateSecret(desKeySpec);
//加密DES算法/ECB工作方式/PKCS5Padding填充方式
Cipher cipher=Cipher.getInstance("DES/ECB/PKCS5Padding");
//输入加密模式,密钥
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
//加密,输入要加密的内容
byte[] result=cipher.doFinal(src.getBytes());
System.out.println("bc des encrypt十六进制:"+result.hashCode());
//解密
cipher.init(cipher.DECRYPT_MODE, convertSecretKey);
result=cipher.doFinal(result);
System.out.println("bc des decrypt:"+new String(result));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 3DES
*/
public static void jdk3DES(){
try {
//生成Key
KeyGenerator keyGeneratro=KeyGenerator.getInstance("DESede");
//Key Size
//keyGeneratro.init(168);
//生成默认长度
keyGeneratro.init(new SecureRandom());
SecretKey secrekKey=keyGeneratro.generateKey();
byte[] bytesKey=secrekKey.getEncoded();
//Key转换(传入生成的bytesKey)
DESedeKeySpec desKeySpec=new DESedeKeySpec(bytesKey);
//factory传入加密方式
SecretKeyFactory factory=SecretKeyFactory.getInstance("DESede");
//Key转换生成密钥
SecretKey convertSecretKey=factory.generateSecret(desKeySpec);
//加密DES算法/ECB工作方式/PKCS5Padding填充方式
Cipher cipher=Cipher.getInstance("DESede/ECB/PKCS5Padding");
//输入加密模式,密钥
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
//加密,输入要加密的内容
byte[] result=cipher.doFinal(src.getBytes());
System.out.println("jdk 3des encrypt十六进制:"+result.hashCode());
//解密
cipher.init(cipher.DECRYPT_MODE, convertSecretKey);
result=cipher.doFinal(result);
System.out.println("jek 3des decrypt:"+new String(result));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
jdkDES();
bcDES();
jdk3DES();
}
}