当前位置:   article > 正文

【HMAC-SHA1算法以及工作原理】_hmacsha1

hmacsha1

在这里插入图片描述
曾梦想执剑走天涯,我是程序猿【AK】

在这里插入图片描述

简述概要

连接HMAC-SHA1工作原理以及工具代码

知识图谱

HMAC(Hash-based Message Authentication Code,基于散列的消息认证码)是一种结合了密钥和消息的认证方法,用于同时验证数据的完整性和数据的真实性。HMAC-SHA1 是 HMAC 算法的一种,它使用 SHA-1 散列函数。

HMAC-SHA1 的工作原理如下:

选择一个加密哈希函数(如 SHA-1)。
如果密钥长度大于哈希函数的块大小(对于 SHA-1 是 512 位),则先对密钥进行哈希处理;如果密钥长度小于块大小,则用零填充至块大小。
将处理后的密钥与一个内部的填充常量(ipad)进行异或运算,得到第一个密钥。
对消息进行处理,将消息与第一步得到的密钥进行异或运算。
对结果进行哈希处理。
将第一步得到的密钥与另一个外部的填充常量(opad)进行异或运算,得到第二个密钥。
对上一步的哈希结果与第二步得到的密钥进行异或运算。
对结果进行最终的哈希处理,得到最终的 HMAC 值。
以下是使用 Java 实现 HMAC-SHA1 的代码示例:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class HmacSha1Example {
    public static String hmacSha1(String data, String key) throws NoSuchAlgorithmException, InvalidKeyException {
        // 获取HMAC-SHA1的Mac实例
        Mac sha1HMAC = Mac.getInstance("HmacSHA1");
        // 密钥转换为字节
        byte[] keyBytes = key.getBytes();
        // 使用给定的密钥初始化Mac对象
        SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "HmacSHA1");
        sha1HMAC.init(secretKey);

        // 执行HMAC操作
        byte[] hashBytes = sha1HMAC.doFinal(data.getBytes());

        // 将得到的字节数组转换为十六进制字符串
        StringBuilder hexString = new StringBuilder();
        for (byte b : hashBytes) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }

        // 返回Base64编码的字符串
        return Base64.getEncoder().encodeToString(hashBytes);
    }

    public static void main(String[] args) {
        try {
            String data = "The quick brown fox jumps over the lazy dog";
            String key = "secret";
            String hmacSha1 = hmacSha1(data, key);
            System.out.println("HMAC-SHA1: " + hmacSha1);
        } catch (NoSuchAlgorithmException | InvalidKeyException e) {
            e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

在这个例子中,我们首先创建了一个 Mac 对象,指定使用 “HmacSHA1” 算法。然后,我们将密钥转换为字节,并创建一个 SecretKeySpec 对象来初始化 Mac 对象。接着,我们使用 doFinal 方法对数据进行 HMAC 操作。最后,我们将得到的字节数组转换为十六进制字符串,并使用 Base64 编码输出结果。

请注意,为了安全起见,不要在生产环境中使用 SHA-1,因为它已经被证明存在潜在的安全问题。在可能的情况下,使用更安全的哈希函数,如 SHA-256。

总结

引入链接,Github、Gitee等知识仓库



                                                                                                         ---- 永不磨灭的番号:我是AK



在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号