对称加密算法(2):3DES

来源:互联网 发布:水琴为何声音恐怖知乎 编辑:程序博客网 时间:2024/05/17 09:25

3DES 的实现方式:jdk 的实现 , BouncyCastle 的实现方式 


    /** * jdk 3DES 生成秘钥  * @return * @throws Exception */public static byte [] JDK_3DES_GetSecretKey() throws Exception{KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");keyGenerator.init(168);  // 秘钥的长度 ,可使用 new SecureRandom() 生成默认长度的秘钥SecretKey secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/** * 使用 3des 对数据进行加密  * @param src * @param encryptKey * @return * @throws Exception */public static byte [] JDK_3DES_Encrypt(String src,byte [] encryptKey) throws Exception{//Key 的转换DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");Key secretKey = factory.generateSecret(keySpec);//加密Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte [] result = cipher.doFinal(src.getBytes());return result;}/** * 使用 3des 对数据进行解密  * @param encryptBytes * @param encryptKey * @return * @throws Exception */public static String JDK_3DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{//Key 的转换DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");Key secretKey = factory.generateSecret(keySpec);//解密Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKey);String result = new String(cipher.doFinal(encryptBytes));return result;}/** * bc 3DES 生成秘钥  * @return * @throws Exception */public static byte [] BC_3DES_GetSecretKey() throws Exception{Security.addProvider(new BouncyCastleProvider());KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede","BC");keyGenerator.init(new SecureRandom());  // 秘钥的长度  new SecureRandom() 默认长度SecretKey secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/** * 使用 3des 对数据进行加密  * @param src * @param encryptKey * @return * @throws Exception */public static byte [] BC_3DES_Encrypt(String src,byte [] encryptKey) throws Exception{//Key 的转换DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");Key secretKey = factory.generateSecret(keySpec);//加密Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte [] result = cipher.doFinal(src.getBytes());return result;}/** * 使用 3des 对数据进行解密  * @param encryptBytes * @param encryptKey * @return * @throws Exception */public static String BC_3DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{//Key 的转换DESedeKeySpec keySpec = new DESedeKeySpec(encryptKey);SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");Key secretKey = factory.generateSecret(keySpec);//解密Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKey);String result = new String(cipher.doFinal(encryptBytes));return result;}


原创粉丝点击