对称加密算法DES

    xiaoxiao2021-03-25  90

    package com.imooc.security.des; import java.security.Key; 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.SecretKeySpec; import org.apache.commons.codec.binary.Hex; import org.bouncycastle.jce.provider.BouncyCastleProvider; /** * 对称加密算法 * @author Bingo_Ge * */ public class ImoocDES { private static String src = "imooc security des"; public static void main(String[] args) { jdkDES(); bcDES(); } public static void jdkDES() { //1.生成KEY-byte try { KeyGenerator keyGenerator = KeyGenerator.getInstance("DES"); keyGenerator.init(56); // 初始化KEY长度,默认就是56 SecretKey secretKey = keyGenerator.generateKey(); byte[] bytesKey = secretKey.getEncoded(); // 2.KEY转换 DESKeySpec desKeySpec = new DESKeySpec(bytesKey);//放入按指定加密方式生成key的byte数组 SecretKeyFactory factory = SecretKeyFactory.getInstance("DES"); Key converSecretKey = factory.generateSecret(desKeySpec); // 生成转换后的密钥 // Key converSecretKey = new SecretKeySpec(bytesKey, "DES"); // 加密 Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); //生成加密类(固定写法) cipher.init(cipher.ENCRYPT_MODE, converSecretKey); //填入加解密模式和密钥 byte[] result = cipher.doFinal(src.getBytes()); //得到加密后结果数组 System.out.println("jdk des encrypt:" + Hex.encodeHexString(result)); //解密 cipher.init(cipher.DECRYPT_MODE, converSecretKey); //此处为解密模式,还是需要用到原来的key result = cipher.doFinal(result); //得到解密后结果数组 System.out.println("jdk des decrypt:" + new String(result)); } catch (Exception e) { e.printStackTrace(); } } public static void bcDES() { Security.addProvider(new BouncyCastleProvider()); //1.生成KEY-byte try { KeyGenerator keyGenerator = KeyGenerator.getInstance("DES","BC"); //需要指定provider才会生效 keyGenerator.getProvider();//需要指定provider才会生效 keyGenerator.init(56); // 初始化KEY长度,默认就是56 SecretKey secretKey = keyGenerator.generateKey(); byte[] bytesKey = secretKey.getEncoded(); // 2.KEY转换 DESKeySpec desKeySpec = new DESKeySpec(bytesKey);//放入按指定加密方式生成key的byte数组 SecretKeyFactory factory = SecretKeyFactory.getInstance("DES"); Key converSecretKey = factory.generateSecret(desKeySpec); // 生成转换后的密钥 // 加密 Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); //生成加密类 cipher.init(cipher.ENCRYPT_MODE, converSecretKey); //填入加解密模式和密钥 byte[] result = cipher.doFinal(src.getBytes()); //得到加密后结果数组 System.out.println("bc des encrypt:" + Hex.encodeHexString(result)); //解密 cipher.init(cipher.DECRYPT_MODE, converSecretKey); //此处为解密模式,还是需要用到原来的key result = cipher.doFinal(result); //得到解密后结果数组 System.out.println("bc des decrypt:" + new String(result)); } catch (Exception e) { e.printStackTrace(); } } }
    转载请注明原文地址: https://ju.6miu.com/read-21950.html

    最新回复(0)