zoukankan      html  css  js  c++  java
  • HMACSHA1 加密算法

    一、HMACSHA1算法介绍:

       HMACSHA1 是从 SHA1 哈希函数构造的一种键控哈希算法,被用作 HMAC(基于哈希的消息验证代码)。 此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数。 输出的哈希值长度为 160 位。(注意:HMACSHA1 接受任何大小的密钥,并产生长度为 160 位的哈希序列)

      在发送方和接收方共享机密密钥的前提下,HMAC 可用于确定通过不安全信道发送的消息是否已被篡改。 发送方计算原始数据的哈希值,并将原始数据和哈希值放在一个消息中同时传送。 接收方重新计算所接收消息的哈希值,并检查计算所得的 HMAC 是否与传送的 HMAC 匹配。因为更改消息和重新生成正确的哈希值需要密钥,所以对数据或哈希值的任何更改都会导致不匹配。 因此,如果原始的哈希值与计算得出的哈希值相匹配,则消息通过身份验证。SHA-1(安全哈希算法,也称为 SHS、安全哈希标准)是由美国政府发布的一种加密哈希算法。 它将从任意长度的字符串生成 160 位的哈希值。

    二、加密算法:

     1 //region HMACSHA1 加密算法
     2 
     3     /**
     4      * @param text    加密密文
     5      * @param secrete 密钥
     6      */
     7     public static String makeHMACSHA1(String text, String secrete) {
     8         //将urlpath和paramp
     9         Mac mac;
    10         byte[] bytes = new byte[0];
    11         try {
    12             //将报文和密钥转换成字节流
    13             byte[] textByte = text.getBytes(EncodingEnum.UTF_8.toString());
    14             byte[] secreteByte = secrete.getBytes(EncodingEnum.UTF_8.toString());
    15             //根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
    16             SecretKeySpec secretKey = new SecretKeySpec(secreteByte, HMAC_SHA1);
    17             //生成一个指定 Mac 算法 的 Mac 对象
    18             mac = Mac.getInstance(HMAC_SHA1);
    19             //用给定密钥初始化 Mac 对象
    20             mac.init(secretKey);
    21             //对进行签名
    22             mac.update(textByte);
    23             //
    24             bytes = mac.doFinal();
    25         } catch (Exception e) {
    26             PolyException.throwException(ErrorCodes.LOGICERROR, CoreUtils.exceptionToString(e));
    27         }
    28 
    29         //签名结果转换成字符串
    30         if (bytes == null) {
    31             return null;
    32         }
    33         char[] result = new char[bytes.length * 2];
    34         for (int i = 0; i < bytes.length; i++) {
    35             result[i * 2] = DIGITAL[(bytes[i] & 0xf0) >> 4];
    36             result[i * 2 + 1] = DIGITAL[bytes[i] & 0x0f];
    37         }
    38         return new String(result);
    39     }
    40 
    41     //endregion
  • 相关阅读:
    centos 7.5搭建oracle DG
    oracle 11g修改归档日志目录及大小
    oracle修改数据文件路径
    oracle 11g调优常用语句
    MySQL MHA安装配置
    mysql中的数据库操作
    mysql 中用户与权限的操作
    percona server安装
    mysql配置文件相关
    条件判断中的真假
  • 原文地址:https://www.cnblogs.com/zhoudaxing/p/12400904.html
Copyright © 2011-2022 走看看