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);
            }
        }
    }
    
  • 相关阅读:
    C# 建立快捷方式
    ae中gp执行 Error HRESULT E_FAIL has been returned from a call to a COM component错误
    AE编辑点要素编辑
    噱头还是革命 云计算“泡沫”五年后改变世界? 狼人:
    分析:英特尔收购McAfee的三大意义 狼人:
    云安全:防护“工具”还是攻击“利器” 狼人:
    热点:安全问题是否能将DNS推入云服务 狼人:
    迈克菲收购tenCube 打造新一代移动安全平台 狼人:
    戴尔推免费浏览器安全工具 可隔离恶意软件 狼人:
    黑帽大会:HTTPS和SSL协议存在安全漏洞 狼人:
  • 原文地址:https://www.cnblogs.com/linjisong/p/8759060.html
Copyright © 2011-2022 走看看