zoukankan      html  css  js  c++  java
  • 3DES 加、解密

    package com.suning.hrqz.utils;
    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESedeKeySpec;
    import javax.crypto.spec.IvParameterSpec;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.util.Base64Utils;
    //import java.util.Base64;
    //import org.apache.commons.net.util.Base64;
    public class DES3 {
        public static void main(String[] args) throws UnsupportedEncodingException,
                NoSuchAlgorithmException {
            String keyStr = "HRDS20170810";
            System.out.println("密钥明文:" + keyStr);
            byte keys[] = keyStr.getBytes("UTF-8");
            System.out.println("UTF-8十六进制:" + bytes2hex(keys));
            String keyBase64 = Base64Utils.encodeToString(keys);
            System.out.println("Base64密钥:" + keyBase64);
            System.out.println("Base64密钥还原:"
                    + new String(Base64Utils.decodeFromString(keyBase64), "UTF-8")
                    + " ");
            String strText = "1";
            System.out.println("待加密的串:" + strText);
            String text1 = DES3.encryptProperty(strText, keyBase64);
            System.out.println("Base64密文:" + text1);
            String text2 = DES3.decryptProperty(text1, keyBase64);
            System.out.println("解密出的串:" + text2);
            // ////加密指纹
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update((strText + keyStr).getBytes("UTF-8"));
            System.out.println("MD5加密指纹:" + bytes2hex(md5.digest()));
        }
        private DES3() {
        }
        public static String encryptProperty(String clearText, String keyBase64) {
            if(StringUtils.isBlank(clearText)){
                return "";
            }
            byte[] key = Base64Utils.decodeFromString(keyBase64);
            return DES3.performDESedeCoder(clearText, key, true);
        }
        public static String decryptProperty(String cipherText, String keyBase64) {
            byte[] key = Base64Utils.decodeFromString(keyBase64);
            return DES3.performDESedeCoder(cipherText, key, false);
        }
        public static String performDESedeCoder(String inputValue, byte[] key,
                boolean encrypt) {
            byte[] k = key;
            byte keyByteArray[];
            if (k.length < 24) {
                keyByteArray = new byte[24];
                System.arraycopy(k, 0, keyByteArray, 0, k.length);
                for (int i = k.length; i < 24; i++) {
                    keyByteArray[i] = 48;// 不足24字节时,补0
                }
                k = keyByteArray;
            }
            String KEY_ALGORITHM = "DESede";
            String CIPHER_ALGORITHM = "DESede/CBC/PKCS5Padding";
            byte[] data = null;
            try {
                DESedeKeySpec dks = new DESedeKeySpec(k);
                SecretKeyFactory keyFactory = SecretKeyFactory
                        .getInstance(KEY_ALGORITHM);
                SecretKey secretKey = keyFactory.generateSecret(dks);
                IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());
                Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
                byte[] input;
                if (encrypt) {
                    cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
                    input = inputValue.getBytes("UTF-8");
                } else {
                    cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
                    input = Base64Utils.decodeFromString(inputValue);
                }
                data = cipher.doFinal(input);
            } catch (Exception e) {
                throw new HRQZRuntimeException(e);
            }
            String rtnValue;
            if (data == null) {
                rtnValue = inputValue;
            } else {
                if (encrypt) {
                    rtnValue = Base64Utils.encodeToString(data);
                } else {
                    try {
                        rtnValue = new String(data, "UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        throw new HRQZRuntimeException(e);
                    }
                }
            }
            return rtnValue;
        }
        public static String bytes2hex(byte[] bytes) {
            final String HEX = "0123456789ABCDEF";
            StringBuilder sb = new StringBuilder(bytes.length * 2);
            for (byte b : bytes) {
                // 取出这个字节的高4位,然后与0x0f与运算,得到一个0-15之间的数据,通过HEX.charAt(0-15)即为16进制数
                sb.append(HEX.charAt((b >> 4) & 0x0f));
                // 取出这个字节的低位,与0x0f与运算,得到一个0-15之间的数据,通过HEX.charAt(0-15)即为16进制数
                sb.append(HEX.charAt(b & 0x0f));
            }
            return sb.toString();
        }
    }
  • 相关阅读:
    php获取真实ip地址原理及实现
    关于DateTime计算某个日期过后的多少天之后的日期
    关于get_include_path()和set_include_path()的问题
    LinQ In Action 学习第三章
    LinQ In Action 学习第二章
    LinQ in Action 学习第一章 例子。
    asp.net create windows application and setup service.
    JS alert()、confirm()、prompt()的区别
    php获取用户 地区 、ip地址
    购物车相关 js
  • 原文地址:https://www.cnblogs.com/jiangzhengjun/p/7357114.html
Copyright © 2011-2022 走看看