zoukankan      html  css  js  c++  java
  • 加密工具类

    昨天的笔记中,包含了CryptoUtils和RSAUtils,今天顺便贴一下两个对称加密的工具类:

    DESUtils

    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.security.Provider;
    import java.security.spec.InvalidKeySpecException;
    
    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    
    public class DESUtils extends CryptoUtils {
    
        private final static String KEY_ALGORITHM = "DES";
    
        public static String encrypt(String plainText, String key) {
            try {
                SecretKey securekey = getSecretKey(key);
                Cipher cipher = getCipher(KEY_ALGORITHM);
                cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
                byte[] bt = cipher.doFinal(plainText.getBytes());
                return encodeToString(bt);
            } catch (InvalidKeyException e) {
                throw new RuntimeException(e);
            } catch (IllegalBlockSizeException e) {
                throw new RuntimeException(e);
            } catch (BadPaddingException e) {
                throw new RuntimeException(e);
            }
        }
    
        public static String decrypt(String encryptText, String key) {
            try {
                SecretKey securekey = getSecretKey(key);
                Cipher cipher = getCipher(KEY_ALGORITHM);
                cipher.init(Cipher.DECRYPT_MODE, securekey, random);
                byte[] datas = cipher.doFinal(decodeFromString(encryptText));
                return new String(datas);
            } catch (InvalidKeyException e) {
                throw new RuntimeException(e);
            } catch (IllegalBlockSizeException e) {
                throw new RuntimeException(e);
            } catch (BadPaddingException e) {
                throw new RuntimeException(e);
            }
        }
    
        private static SecretKey getSecretKey(String key) throws InvalidKeyException {
            try {
                byte[] datas = key.getBytes();
                DESKeySpec dks = new DESKeySpec(datas);
                Provider provider = getProvider();
                SecretKeyFactory keyFactory = null;
                if (null == provider) {
                    keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
                } else {
                    keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM, provider);
                }
                SecretKey securekey = keyFactory.generateSecret(dks);
                return securekey;
            } catch (InvalidKeyException e) {
                throw new RuntimeException(e);
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            } catch (InvalidKeySpecException e) {
                throw new RuntimeException(e);
            }
        }
    }
    

    AESUtils

    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.security.Provider;
    import java.security.SecureRandom;
    
    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    
    public class AESUtils extends CryptoUtils {
    
        private static final String KEY_ALGORITHM = "AES";
    
        public static String encrypt(String plantText, String key) {
            try {
                Cipher cipher = getCipher(KEY_ALGORITHM);
                SecretKey secretKey = getSecretKey(key);
                byte[] data = plantText.getBytes();
                cipher.init(Cipher.ENCRYPT_MODE, secretKey);
                byte[] result = cipher.doFinal(data);
                return encodeToString(result);
            } catch (InvalidKeyException e) {
                throw new RuntimeException(e);
            } catch (IllegalBlockSizeException e) {
                throw new RuntimeException(e);
            } catch (BadPaddingException e) {
                throw new RuntimeException(e);
            }
        }
    
        public static String decrypt(String encryptText, String key) {
            try {
                Cipher cipher = getCipher(KEY_ALGORITHM);
                SecretKey secretKey = getSecretKey(key);
                cipher.init(Cipher.DECRYPT_MODE, secretKey);
                byte[] data = decodeFromString(encryptText);
                byte[] result = cipher.doFinal(data);
                return new String(result);
            } catch (InvalidKeyException e) {
                throw new RuntimeException(e);
            } catch (IllegalBlockSizeException e) {
                throw new RuntimeException(e);
            } catch (BadPaddingException e) {
                throw new RuntimeException(e);
            }
        }
    
        private static SecretKey getSecretKey(final String key) {
            try {
                Provider provider = getProvider();
                KeyGenerator kg = null;
                if (null == provider) {
                    kg = KeyGenerator.getInstance(KEY_ALGORITHM);
                } else {
                    kg = KeyGenerator.getInstance(KEY_ALGORITHM, provider);
                }
                kg.init(128, new SecureRandom(key.getBytes()));
                SecretKey secretKey = kg.generateKey();
                return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);// 转换为AES专用密钥
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            }
        }
    }
    
  • 相关阅读:
    【JavaWeb】Hibernate Dao层设计
    【C#】身份证识别(一):身份证号定位
    【JavaWeb】SpringMVC重定向页面取值
    关于chrome扩展的东西
    【C#】基于Opencv/Emgucv的身份证识别
    Bashware
    【java多线程】分段阶乘计算
    【java】多项式计算(中缀转后缀)
    iOS  OTA问题排查【itms-servers协议在线安装ipa包】
    【深度学习】BP算法分类iris数据集
  • 原文地址:https://www.cnblogs.com/linjisong/p/8759060.html
Copyright © 2011-2022 走看看