• java HMAC_SHA1加密算法


    java HMAC_SHA1加密算法

    CreationTime--2018年7月14日16点46分

    Author:Marydon

    1.准备工作

    import javax.crypto.Mac;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    import org.apache.log4j.Logger;
    
    /**
     * HMAC_SHA1加密算法工具类
     * @explain 不可逆算法
     * @author Marydon
     * @creationTime 2018年7月7日上午11:06:58
     * @version 1.0
     * @since
     * @email
     */
    public class HMAC_SHA1Utils {
    
        private static Logger log = Logger.getLogger(HMAC_SHA1Utils.class);
        // 加密方法
        private static final String MAC_NAME = "HmacSHA1";
        // 定义字符集
        private static final String ENCODING = "UTF-8";
    }

    2.HMAC_SHA1加密

    /**
     * 使用HMAC_SHA1算法进行加密
     * @explain
     * @param paramStr
     *            待加密字符串
     * @param key
     *            密钥(长度不限、可以为中文、英文、16进制字符串)
     * @return 16进制加密字符串,长度固定为40
     * @throws Exception
     */
    public static String encrypt(String paramStr, String key) {
        // 用于存储加密后的16进制字符串
        String cipher = "";
        try {
            //
            byte[] data = key.getBytes(ENCODING);
            // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
            // 生成HmacSHA1专属密钥
            SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
            // 生成一个指定 Mac 算法 的 Mac 对象
            Mac mac = Mac.getInstance(MAC_NAME);
            // 用给定密钥初始化 Mac 对象
            mac.init(secretKey);
            byte[] text = paramStr.getBytes(ENCODING);
            // 完成 Mac 操作
            byte[] encryptByte = mac.doFinal(text);
            // 将byte[]-->hexString
            cipher = ByteUtils.toHex(encryptByte);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("HMACSHA1加密失败:" + e.getMessage());
        }
        log.info("HMACSHA1加密结果:" + cipher);
        return cipher;
    }

    3.校验

    /**
     * 判断源数据与加密数据是否一致
     * @explain
     * @param srcStr
     *            原字符串
     * @param secretStr
     *            16进制加密字符串
     * @param key
     *            密钥
     * @return 校验结果
     */
    public static boolean verify(String srcStr, String secretStr, String key) {
        boolean flag = false;
        String cipherText = encrypt(srcStr, key);
        if (cipherText.equals(secretStr))
            flag = true;
        return flag;
    }

    4.测试

    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
    
        String json = "{"name":"Marydon","website":"http://www.cnblogs.com/Marydon20170307"}";
        String key = "测试";
        String cipher = HMAC_SHA1Utils.encrypt(json, key);
        System.out.println(cipher);
        System.out.println(HMAC_SHA1Utils.verify(json, cipher, key));
    
    }
  • 相关阅读:
    Dubbo源码分析之ExtensionLoader加载过程解析
    大型网站系统与java中间件实践-阅读笔记
    多线程编程-设计模式之保护性暂挂(Guarded Suspesion)模式
    多线程编程-设计模式之不可变对象模式
    Spring技术内幕阅读笔记(一)
    mysql存储过程语法及实例
    Spring-boot官方案例分析之data-jpa
    Spring-boot官方案例分析之log4j
    Spring Boot应用的测试——Mockito
    linux系统安装redis
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9310685.html
Copyright © 2020-2023  润新知