zoukankan      html  css  js  c++  java
  • DES加密解密 Java中运用

    DES全称Data Encryption Standard,是一种使用密匙加密的块算法。现在认为是一种不安全的加密算法,因为现在已经有用穷举法攻破DES密码的报道了。尽管如此,该加密算法还是运用非常普遍,是一种标准的加密算法。3DES是DES的加强版本。

    Des:

    复制代码
    package com.blog.d201706.encrypt;
    
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    import javax.crypto.spec.IvParameterSpec;
    
    
    public class Des {
    
    
        /**
         * 加密
         * @param data
         * @param sKey
         * @return
         */
        public static byte[] encrypt(byte[] data, String sKey) {
            try {
                byte[] key = sKey.getBytes();
                // 初始化向量
                IvParameterSpec iv = new IvParameterSpec(key);
                DESKeySpec desKey = new DESKeySpec(key);
                // 创建一个密匙工厂,然后用它把DESKeySpec转换成securekey
                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
                SecretKey securekey = keyFactory.generateSecret(desKey);
                // Cipher对象实际完成加密操作
                Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
                // 用密匙初始化Cipher对象
                cipher.init(Cipher.ENCRYPT_MODE, securekey, iv);
                // 现在,获取数据并加密
                // 正式执行加密操作
                return cipher.doFinal(data);
            } catch (Throwable e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 解密
         * @param src
         * @param sKey
         * @return
         * @throws Exception
         */
        public static byte[] decrypt(byte[] src, String sKey) throws Exception {
            byte[] key = sKey.getBytes();
            // 初始化向量
            IvParameterSpec iv = new IvParameterSpec(key);
            // 创建一个DESKeySpec对象
            DESKeySpec desKey = new DESKeySpec(key);
            // 创建一个密匙工厂
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            // 将DESKeySpec对象转换成SecretKey对象
            SecretKey securekey = keyFactory.generateSecret(desKey);
            // Cipher对象实际完成解密操作
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.DECRYPT_MODE, securekey, iv);
            // 真正开始解密操作
            return cipher.doFinal(src);
        }
    
        /**
         * 将二进制转换成16进制
         *
         * @param buf
         * @return
         */
        public static String parseByte2HexStr(byte buf[]) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < buf.length; i++) {
                String hex = Integer.toHexString(buf[i] & 0xFF);
                if (hex.length() == 1) {
                    hex = '0' + hex;
                }
                sb.append(hex.toUpperCase());
            }
            return sb.toString();
        }
    
        /**
         * 将16进制转换为二进制
         *
         * @param hexStr
         * @return
         */
        public static byte[] parseHexStr2Byte(String hexStr) {
            if (hexStr.length() < 1) return null;
            byte[] result = new byte[hexStr.length() / 2];
            for (int i = 0; i < hexStr.length() / 2; i++) {
                int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
                int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
                result[i] = (byte) (high * 16 + low);
            }
            return result;
        }
    }
    复制代码

    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    import javax.crypto.spec.IvParameterSpec;


    public class Des {


    /**
    * 加密
    * @param data
    * @param sKey
    * @return
    */
    public static byte[] encrypt(byte[] data, String sKey) {
    try {
    byte[] key = sKey.getBytes();
    // 初始化向量
    IvParameterSpec iv = new IvParameterSpec(key);
    DESKeySpec desKey = new DESKeySpec(key);
    // 创建一个密匙工厂,然后用它把DESKeySpec转换成securekey
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    SecretKey securekey = keyFactory.generateSecret(desKey);
    // Cipher对象实际完成加密操作
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    // 用密匙初始化Cipher对象
    cipher.init(Cipher.ENCRYPT_MODE, securekey, iv);
    // 现在,获取数据并加密
    // 正式执行加密操作
    return cipher.doFinal(data);
    } catch (Throwable e) {
    e.printStackTrace();
    }
    return null;
    }

    /**
    * 解密
    * @param src
    * @param sKey
    * @return
    * @throws Exception
    */
    public static byte[] decrypt(byte[] src, String sKey) throws Exception {
    byte[] key = sKey.getBytes();
    // 初始化向量
    IvParameterSpec iv = new IvParameterSpec(key);
    // 创建一个DESKeySpec对象
    DESKeySpec desKey = new DESKeySpec(key);
    // 创建一个密匙工厂
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    // 将DESKeySpec对象转换成SecretKey对象
    SecretKey securekey = keyFactory.generateSecret(desKey);
    // Cipher对象实际完成解密操作
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    // 用密匙初始化Cipher对象
    cipher.init(Cipher.DECRYPT_MODE, securekey, iv);
    // 真正开始解密操作
    return cipher.doFinal(src);
    }

    /**
    * 将二进制转换成16进制
    *
    * @param buf
    * @return
    */
    public static String parseByte2HexStr(byte buf[]) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < buf.length; i++) {
    String hex = Integer.toHexString(buf[i] & 0xFF);
    if (hex.length() == 1) {
    hex = '0' + hex;
    }
    sb.append(hex.toUpperCase());
    }
    return sb.toString();
    }

    /**
    * 将16进制转换为二进制
    *
    * @param hexStr
    * @return
    */
    public static byte[] parseHexStr2Byte(String hexStr) {
    if (hexStr.length() < 1) return null;
    byte[] result = new byte[hexStr.length() / 2];
    for (int i = 0; i < hexStr.length() / 2; i++) {
    int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
    int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
    result[i] = (byte) (high * 16 + low);
    }
    return result;
    }
    }

    DesUtil:

    复制代码
    package com.blog.d201706.encrypt;
    
    import java.nio.charset.Charset;
    
    
    public class DesUtil {
    
        /**
         * 加密
         * @param srcStr
         * @param charset
         * @param sKey
         * @return
         */
        public static String encrypt(String srcStr, Charset charset, String sKey) {
            byte[] src = srcStr.getBytes(charset);
            byte[] buf = Des.encrypt(src, sKey);
            return Des.parseByte2HexStr(buf);
        }
    
        /**
         * 解密
         *
         * @param hexStr
         * @param sKey
         * @return
         * @throws Exception
         */
        public static String decrypt(String hexStr, Charset charset, String sKey) throws Exception {
            byte[] src = Des.parseHexStr2Byte(hexStr);
            byte[] buf = Des.decrypt(src, sKey);
            return new String(buf, charset);
        }
    }
    复制代码

    import java.nio.charset.Charset;


    public class DesUtil {

    /**
    * 加密
    * @param srcStr
    * @param charset
    * @param sKey
    * @return
    */
    public static String encrypt(String srcStr, Charset charset, String sKey) {
    byte[] src = srcStr.getBytes(charset);
    byte[] buf = Des.encrypt(src, sKey);
    return Des.parseByte2HexStr(buf);
    }

    /**
    * 解密
    *
    * @param hexStr
    * @param sKey
    * @return
    * @throws Exception
    */
    public static String decrypt(String hexStr, Charset charset, String sKey) throws Exception {
    byte[] src = Des.parseHexStr2Byte(hexStr);
    byte[] buf = Des.decrypt(src, sKey);
    return new String(buf, charset);
    }
    }


    MainApp:

    import java.nio.charset.Charset;

    public class MainApp {
    private static final String SKEY = "abcdefgh";
    private static final Charset CHARSET = Charset.forName("gb2312");

    public static void main(String[] args) {
    // 待加密内容
    String str = "测试内容,今天周四";
    String encryptResult = DesUtil.encrypt(str, CHARSET, SKEY);
    System.out.println(encryptResult);
    // 直接将如上内容解密
    String decryResult = "";
    try {
    decryResult = DesUtil.decrypt(encryptResult, CHARSET, SKEY);
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    System.out.println(decryResult);
    }
    }

  • 相关阅读:
    hive与hbase整合
    待重写
    hive DML
    【知识强化】第六章 总线 6.1 总线概述
    【知识强化】第五章 中央处理器 5.1 CPU的功能和基本结构
    【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
    【知识强化】第四章 指令系统 4.2 指令寻址方式
    【知识强化】第四章 指令系统 4.1 指令格式
    【知识强化】第三章 存储系统 3.6 高速缓冲存储器
    【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器
  • 原文地址:https://www.cnblogs.com/YuyuanNo1/p/9705579.html
Copyright © 2011-2022 走看看