原视频地址
Imooc_JAVA实现对称加密1-1 JAVA-对称加密算法DES
package DES;
import java.security.NoSuchAlgorithmException;
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 org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class DES {
private static String src = "imooc security des";
public static void main(String[] args) {
jdkDES();
bcDES();
}
public static void jdkDES(){
try {
//初始化KeyGenerator Key生成器
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
keygenerator.init(56);
//调用方法生成密匙secretKey 生成秘钥
SecretKey secretKey = keygenerator.generateKey();
//密钥进行getEncoded()获取比特编码byte[]
byte[] byteskey = secretKey.getEncoded();
//KEY的转换
//实例化DES的相关内容
DESKeySpec desKeySpec = new DESKeySpec(byteskey);
//通过秘钥的工厂实例化一个自身的类 getInstance("")的参数为指定的加密方式
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
//通过factory调用方法生成秘钥
// generateSecret()参数为秘钥材料desKeySpec 该生成我们所需要的秘钥
SecretKey convertsecretKey =factory.generateSecret(desKeySpec);
//KEY转换完之后 Cipher类的实例来进行加密和解密操作
//getInstance("加解密算法/工作方式/填充方式")
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
//cipher.init(opmode, certificate); 第一个参数为模式 第二个参数为转换后的KEY
// Cipher.ENCRYPT_MODE加密模式 转换后的KEY:convertsecretKey
cipher.init(Cipher.ENCRYPT_MODE, convertsecretKey);
//doFinal(input); input即使要被加密的内容
byte[] result = cipher.doFinal(src.getBytes());
System.out.println("jdk des encrypt:"+Hex.encodeHexString(result));
//解密
//cipher.init(opmode, certificate); 第一个参数为模式 第二个参数为转换后的KEY
// Cipher.ENCRYPT_MODE解密模式 转换后的KEY:convertsecretKey
cipher.init(Cipher.DECRYPT_MODE, convertsecretKey);
result = cipher.doFinal(result);
System.out.println("jdk des decrypt:"+new String(result));
} catch (Exception e) {
e.printStackTrace();
}
}//jdkDES方法结束
public static void bcDES(){
try {
Security.addProvider(new BouncyCastleProvider());
//初始化KeyGenerator Key生成器
KeyGenerator keygenerator = KeyGenerator.getInstance("DES","BC");
keygenerator.getProvider();
keygenerator.init(56);
//调用方法生成密匙secretKey 生成秘钥
SecretKey secretKey = keygenerator.generateKey();
//密钥进行getEncoded()获取比特编码byte[]
byte[] byteskey = secretKey.getEncoded();
//KEY的转换
//实例化DES的相关内容
DESKeySpec desKeySpec = new DESKeySpec(byteskey);
//通过秘钥的工厂实例化一个自身的类 getInstance("")的参数为指定的加密方式
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
//通过factory调用方法生成秘钥
// generateSecret()参数为秘钥材料desKeySpec 该生成我们所需要的秘钥
SecretKey convertsecretKey =factory.generateSecret(desKeySpec);
//KEY转换完之后 Cipher类的实例来进行加密和解密操作
//getInstance("加解密算法/工作方式/填充方式")
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
//cipher.init(opmode, certificate); 第一个参数为模式 第二个参数为转换后的KEY
// Cipher.ENCRYPT_MODE加密模式 转换后的KEY:convertsecretKey
cipher.init(Cipher.ENCRYPT_MODE, convertsecretKey);
//doFinal(input); input即使要被加密的内容
byte[] result = cipher.doFinal(src.getBytes());
System.out.println("bc des encrypt:"+Hex.encodeHexString(result));
//解密
//cipher.init(opmode, certificate); 第一个参数为模式 第二个参数为转换后的KEY
// Cipher.ENCRYPT_MODE解密模式 转换后的KEY:convertsecretKey
cipher.init(Cipher.DECRYPT_MODE, convertsecretKey);
result = cipher.doFinal(result);
System.out.println("bc des decrypt:"+new String(result));
} catch (Exception e) {
e.printStackTrace();
}
}
}