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);
            }
        }
    }
    
  • 相关阅读:
    二叉树同构
    L1-001 Hello World--java
    关于Hanoi的递归分析
    L1-049 天梯赛座位分配
    1001 害死人不偿命的(3n+1)猜想 && 1005 继续(3n+1)猜想
    L1-046 整除光棍
    L1-043 阅览室
    lambda_Consumer接口
    lambda_Supplier接口
    Veu_v-for
  • 原文地址:https://www.cnblogs.com/linjisong/p/8759060.html
Copyright © 2011-2022 走看看