• DES加密解密类-java


    import java.security.*;
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    /**
     * Copyright 2007 GuangZhou Cotel Co. Ltd.
     * All right reserved.    
     * DES加密解密类.     
     * @author <a href="mailto:xiexingxing1121@126.com" mce_href="mailto:xiexingxing1121@126.com">AmigoXie</a>
     * @version 1.0 
     * Creation date: 2007-7-31 - 上午11:59:28
     */
    public class Des {
        /** 加密、解密key. */
        private static final String PASSWORD_CRYPT_KEY = "kEHrDooxWHCWtfeSxvDvgqZq";
        /** 加密算法,可用 DES,DESede,Blowfish. */
        private final static String ALGORITHM = "DES";
        public static void main(String[] args) throws Exception {
            String md5Password = "202cb962ac59075b964b07152d234b70";
            String str = Des.encrypt(md5Password);
            System.out.println("str: " + str);
            str = Des.decrypt(str);
            System.out.println("str: " + str);
        }
        
        /**
         * 对数据进行DES加密.
         * @param data 待进行DES加密的数据
         * @return 返回经过DES加密后的数据
         * @throws Exception
         * @author <a href="mailto:xiexingxing1121@126.com" mce_href="mailto:xiexingxing1121@126.com">AmigoXie</a>
         * Creation date: 2007-7-31 - 下午12:06:24
         */
        public final static String decrypt(String data) throws Exception {
            return new String(decrypt(hex2byte(data.getBytes()),
                    PASSWORD_CRYPT_KEY.getBytes()));
        }
        /**
         * 对用DES加密过的数据进行解密.
         * @param data DES加密数据
         * @return 返回解密后的数据
         * @throws Exception
         * @author <a href="mailto:xiexingxing1121@126.com" mce_href="mailto:xiexingxing1121@126.com">AmigoXie</a>
         * Creation date: 2007-7-31 - 下午12:07:54
         */
        public final static String encrypt(String data) throws Exception  {
            return byte2hex(encrypt(data.getBytes(), PASSWORD_CRYPT_KEY
                    .getBytes()));
        }
        
        /**
         * 用指定的key对数据进行DES加密.
         * @param data 待加密的数据
         * @param key DES加密的key
         * @return 返回DES加密后的数据
         * @throws Exception
         * @author <a href="mailto:xiexingxing1121@126.com" mce_href="mailto:xiexingxing1121@126.com">AmigoXie</a>
         * Creation date: 2007-7-31 - 下午12:09:03
         */
        private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
            // DES算法要求有一个可信任的随机数源
            SecureRandom sr = new SecureRandom();
            // 从原始密匙数据创建DESKeySpec对象
            DESKeySpec dks = new DESKeySpec(key);
            // 创建一个密匙工厂,然后用它把DESKeySpec转换成
            // 一个SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
            SecretKey securekey = keyFactory.generateSecret(dks);
            // Cipher对象实际完成加密操作
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
            // 现在,获取数据并加密
            // 正式执行加密操作
            return cipher.doFinal(data);
        }
        /**
         * 用指定的key对数据进行DES解密.
         * @param data 待解密的数据
         * @param key DES解密的key
         * @return 返回DES解密后的数据
         * @throws Exception
         * @author <a href="mailto:xiexingxing1121@126.com" mce_href="mailto:xiexingxing1121@126.com">AmigoXie</a>
         * Creation date: 2007-7-31 - 下午12:10:34
         */
        private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
            // DES算法要求有一个可信任的随机数源
            SecureRandom sr = new SecureRandom();
            // 从原始密匙数据创建一个DESKeySpec对象
            DESKeySpec dks = new DESKeySpec(key);
            // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成
            // 一个SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
            SecretKey securekey = keyFactory.generateSecret(dks);
            // Cipher对象实际完成解密操作
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
            // 现在,获取数据并解密
            // 正式执行解密操作
            return cipher.doFinal(data);
        }
        public static byte[] hex2byte(byte[] b) {
            if ((b.length % 2) != 0)
                throw new IllegalArgumentException("长度不是偶数");
            byte[] b2 = new byte[b.length / 2];
            for (int n = 0; n < b.length; n += 2) {
                String item = new String(b, n, 2);
                b2[n / 2] = (byte) Integer.parseInt(item, 16);
            }
            return b2;
        }
        public static String byte2hex(byte[] b) {
            String hs = "";
            String stmp = "";
            for (int n = 0; n < b.length; n++) {
                stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
                if (stmp.length() == 1)
                    hs = hs + "0" + stmp;
                else
                    hs = hs + stmp;
            }
            return hs.toUpperCase();
        }
    }
    
  • 相关阅读:
    VS2013使用scanf、gets及字符串函数编译报错error C4996: 'scanf': This function or variable may be unsafe. 原因及解决方案
    关于vs2013与office系列软件一起安装出现bug的情况描述以及解决办法——打开vs2013鼠标不动/动不了
    武汉华师驾校学车笔记_纪实
    vs2013由修改模式改为输入模式。
    解析:求最大公约数的“辗转相除法原理”
    关于scanf与scanf_s的区别,以及用scanf编译出错并且提示找不到可执行文件.exe的解决办法。
    [C编译器]在VS中编译调试C程序
    使用vs编译程序选择新建”空项目“与”win32控制台应用程序“的区别。
    AngularJS+Ionic开发-1.搭建开发环境
    PetaPoco源代码学习--3.Sql类
  • 原文地址:https://www.cnblogs.com/childhooding/p/4479443.html
Copyright © 2020-2023  润新知