原视频地址 Imooc_JAVA实现对称加密2-1 JAVA-对称加密算法3DES
package DES; import java.security.SecureRandom; 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.apache.commons.codec.binary.Hex; public class By3DES { private static String src = "imooc security 3des"; public static void main(String[] args) { jdk3DES(); }//main方法结束 private static void jdk3DES(){ try { //初始化KeyGenerator Key生成器 KeyGenerator keygenerator = KeyGenerator.getInstance("DESede"); // keygenerator.init(168); // SecureRandom()生成默认长度的类 keygenerator.init(new SecureRandom()); //调用方法生成密匙secretKey 生成秘钥 SecretKey secretKey = keygenerator.generateKey(); //密钥进行getEncoded()获取比特编码byte[] byte[] byteskey = secretKey.getEncoded(); //KEY的转换 //实例化DES的相关内容 DESedeKeySpec desKeySpec = new DESedeKeySpec(byteskey); //通过秘钥的工厂实例化一个自身的类 getInstance("")的参数为指定的加密方式 SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede"); //通过factory调用方法生成秘钥 // generateSecret()参数为秘钥材料desKeySpec 该生成我们所需要的秘钥 SecretKey convertsecretKey =factory.generateSecret(desKeySpec); //KEY转换完之后 Cipher类的实例来进行加密和解密操作 //getInstance("加解密算法/工作方式/填充方式") Cipher cipher = Cipher.getInstance("DESede/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 3desede 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 3desede decrypt:"+new String(result)); } catch (Exception e) { e.printStackTrace(); } }//jdk3des()方法 private static void bc3DES(){ //作业 } }