美文网首页
HMAC加密

HMAC加密

作者: 夜月行者 | 来源:发表于2017-11-27 18:06 被阅读0次

简介

这种加密算法并不是那么常用,全称为“Hash Message Authentication Code”,中文名“散列消息鉴别码”,主要是利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

过程

MAC 的密钥可以是任意长度(比 B 长的密钥将首先被 H 处理)。但当密钥 长度小于 L 时,会降低函数的安全强度。长度大于 L 的密钥也是可以的,但额外的长度并不能显著的提高函数的安全强度
定义 HMAC 需要一个加密用散列函数(表示为 H)和一个密钥 K。我们假设 H 是 一个将数据块用一个基本的迭代压缩函数来加密的散列函数。我们用 B 来表示数据块的字长。(以上提到的散列函数的分割数据块字长 B = 64),用 L 来表示散列函数的输出数据字长(MD5中 L = 16 , SHA-1 中 L = 20)。鉴别密钥的长度可以是小于等于数据块字长的任何正整数值。应用程序中使用的密钥长度若是比 B 大,则首先用使用散列函数 H 作用于它,然后用 H 输出的 L 长度字符串作为在 HMAC 中实际使用的密钥。一般情况下,推荐的最小密钥 K 长度是 L 个字长。(与 H 的输出数据长度相等)。

我们将定义两个固定且不同的字符串 ipad,opad:(‘i’,‘o’表示内部与外部)

ipad = the byte 0x36 repeated B times
opad = the byte 0x5C repeated B times

计算‘text’的 HMAC:

H (K XOR opad, H (K XOR ipad, text))

java demo

 public static void HmacSHA1Encrypt() throws Exception
 
    {
        String encryptText="aaaa";
        String encryptKey = "bbb";
        String MAC_NAME = "HmacSHA1";
        byte[] data=encryptKey.getBytes("utf-8");
        //根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        SecretKey secretKey = new SecretKeySpec(data, "");//这个java类是不关注密钥对应的加密算法,不传空就可以。
        //生成一个指定 Mac 算法 的 Mac 对象
        Mac mac = Mac.getInstance(MAC_NAME);
        //用给定密钥初始化 Mac 对象
        mac.init(secretKey);
 
        byte[] text = encryptText.getBytes("utf-8");
        //完成 Mac 操作
        System.out.println(str16(mac.doFinal(text)));
        System.out.println(str16(mac.doFinal(text)).length());
    }

相关文章

  • HMAC加密

    简介 这种加密算法并不是那么常用,全称为“Hash Message Authentication Code”,中文...

  • iOS常见信息加密方式总结

    目录 MD5加密HMAC加密base64加密对称加密RSA加密 - 非对称加密 一.MD5加密 MD5加密是最常用...

  • Node-3

    crypto 模块 crypto 模块提供了加密功能,实现了包括对 OpenSSL 的哈希、HMAC、加密、解密、...

  • node.js密码加密实践

    crypto crypto 模块提供了加密的功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及...

  • vue-cli中HamcSHA256加密

    在线加密解密地址 安装依赖 在文件中引入 字符串加密 对象 各种语言HMAC SHA256实现

  • Node crypto模块简单探究

    crypto 模块提供了加密功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套...

  • hmac-sha256 2021-11-02

    hmac-sha256 本质上,hmac-sha256是对字节流进行加密,得到的结果也是字节流而我们可以根据需要,...

  • SHA MD5 Hmac算法是不可逆的, 只有加密, 不能解密

    常用的加密算法:SHA、MD5、Hmac 常用的加密/解密算法: AES、DES 常用的编码解码算法: UrlDe...

  • Python加密—HMACSHA1 加密

    1、HMACSHA1 加密通过hmac模块实现,需要一个key 2、HMACSHA1加密,返回Base64编码

  • Diffie-Hellman密钥协商算法

    加密算法介绍 目前常用的加密算法主要有:哈希算法(比如MD5、SHA族、Hmac),对称加密算法(比如AES),非...

网友评论

      本文标题:HMAC加密

      本文链接:https://www.haomeiwen.com/subject/tnidbxtx.html