zoukankan      html  css  js  c++  java
  • java使用秘钥 对字符串进行加密、解密

    java使用秘钥 对字符串进行加密、解密

    package com.mybatis.plus.utils;
    
    import java.io.IOException;
    import java.security.SecureRandom;
    
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    /**
     * DES加密 解密算法
     * @author zhangdi
     *
     */
    public class DesUtil {
    
        private final static String DES = "DES";
        private final static String ENCODE = "GBK";
        private final static String defaultKey = "netwxactive";
    
        /**
         * 使用 默认key 加密
         * @param data 待加密数据
         * @return
         * @throws Exception
         */
        public static String encrypt(String data) throws Exception {
            byte[] bt = encrypt(data.getBytes(ENCODE), defaultKey.getBytes(ENCODE));
            String strs = new BASE64Encoder().encode(bt);
            return strs;
        }
    
        /**
         * 使用 默认key 解密
         * @param data 待解密数据
         * @return
         * @throws IOException
         * @throws Exception
         */
        public static String decrypt(String data) throws IOException, Exception {
            if (data == null)
                return null;
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] buf = decoder.decodeBuffer(data);
            byte[] bt = decrypt(buf, defaultKey.getBytes(ENCODE));
            return new String(bt, ENCODE);
        }
    
        /**
         * Description 根据键值进行加密
         * @param data 待加密数据
         * @param key 密钥
         * @return
         * @throws Exception
         */
        public static String encrypt(String data, String key) throws Exception {
            byte[] bt = encrypt(data.getBytes(ENCODE), key.getBytes(ENCODE));
            String strs = new BASE64Encoder().encode(bt);
            return strs;
        }
    
        /**
         * 根据键值进行解密
         * @param data 待解密数据
         * @param key    密钥
         * @return
         * @throws IOException
         * @throws Exception
         */
        public static String decrypt(String data, String key) throws IOException,
                Exception {
            if (data == null)
                return null;
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] buf = decoder.decodeBuffer(data);
            byte[] bt = decrypt(buf, key.getBytes(ENCODE));
            return new String(bt, ENCODE);
        }
    
        /**
         * Description 根据键值进行加密
         * 
         * @param data
         * @param key
         *            加密键byte数组
         * @return
         * @throws Exception
         */
        private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
            // 生成一个可信任的随机数源
            SecureRandom sr = new SecureRandom();
            // 从原始密钥数据创建DESKeySpec对象
            DESKeySpec dks = new DESKeySpec(key);
            // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
            SecretKey securekey = keyFactory.generateSecret(dks);
            // Cipher对象实际完成加密操作
            Cipher cipher = Cipher.getInstance(DES);
            // 用密钥初始化Cipher对象
            cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
            return cipher.doFinal(data);
        }
    
        /**
         * Description 根据键值进行解密
         * 
         * @param data
         * @param key 加密键byte数组
         * @return
         * @throws Exception
         */
        private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
            // 生成一个可信任的随机数源
            SecureRandom sr = new SecureRandom();
    
            // 从原始密钥数据创建DESKeySpec对象
            DESKeySpec dks = new DESKeySpec(key);
    
            // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
            SecretKey securekey = keyFactory.generateSecret(dks);
    
            // Cipher对象实际完成解密操作
            Cipher cipher = Cipher.getInstance(DES);
    
            // 用密钥初始化Cipher对象
            cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
    
            return cipher.doFinal(data);
        }
        
        public static void main(String[] args){
            String data = "我是需要被加密的数据";
            // 这里的key长度必须大于8位
            String key ="12345678";
            System.out.println("初始数据===>"+data);
            try {
                System.out.println();
                System.out.println(">>>>>>>>>>根据预定秘钥加密后:" + encrypt(data, key));
                System.out.println(">>>>>>>>>>根据预定秘钥解密后:" + decrypt(encrypt(data, key), key));
    
                System.out.println("==========================================");
                String encrypt = encrypt(data);
                System.out.println(">>>>>>>>>>默认秘钥加密后:"+encrypt);
                System.out.println(">>>>>>>>>>默认秘钥解密后:"+decrypt(encrypt));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }

  • 相关阅读:
    显示器接口
    常用英语-持续更新
    Web Service
    单元测试--Moq
    单元测试--Xunit
    Asp.Net WebApi 跨域问题
    VS中常用的快捷键
    单元测试--最佳实践
    设计模式--建造者模式
    windows10搭建GitBucket服务器(1)
  • 原文地址:https://www.cnblogs.com/guanxiaohe/p/14277127.html
Copyright © 2011-2022 走看看