Hmac算法1. Hmac是Hash-based Messsage Authentication Code的缩写,它是一种基于密钥的消息认证算法2. 也是一种更安全的额消息摘要算法例如HmacMD5算法,它相当于我们使用一个随机安全的key,和原始数据混合以后,做MD5摘要

HmacMD5可以看作是带安全Salt的MD5,当我们直接使用MD5的时候,我们需要自己生成一个salt,然后通过salt和原始数据data,对这两个数据进行MD5摘要,而我们使用HmacMD5的时候,我们直接获取一个HmacMD5的KeyGenerator,然后通过这个KeyGenerator,获取一个随机的SecretKey,紧接着我们通过Mac.getInstance("HmacMD5")获得一个Mac的实例,然后我们先初始化这个SecretKey,然后再计算输入数据的MD5

这样我们就可以存储用户密码的MD5改写为直接使用一个secret key直接存储密码的Hmac的MD5我们使用的Secret Key有64个字节,因此用HmacMD5会更安全
package com.learn.securl;import java.security.NoSuchAlgorithmException;import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;public class HmacDemo {/*** 我们传入一个hmac算法hmacAlgorithm* skey以及检索数据的输入* @param hmacAlgorithm* @param skey* @param input* @return* @throws Exception*/public static byte[] hmac(String hmacAlgorithm, SecretKey skey, byte[] input) throws Exception {/*** 然后我们通过一个Mac.getInstance获取一个Mac实例*/Mac mac = Mac.getInstance(hmacAlgorithm);/*** 我们通过init传入一个SecretKey来初始化*/mac.init(skey);/*** 紧接着我们用update方法传入原始数据*/mac.update(input);/*** 通过doFinal方法得到Hmac算法得到的哈希*/return mac.doFinal();}public static String bytesToHexString(byte... src) {StringBuilder stringBuilder = new StringBuilder();if (src == null || src.length <= 0) {return null;}for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v);if (hv.length() < 2) {stringBuilder.append(0);}stringBuilder.append(hv);}return stringBuilder.toString();}public static void main(String[] args) throws Exception {// String algorithm = "HmacSHA1";/*** 我们只需要把SHA1改成SHA256就行了* 这个时候生成出来的哈希就是SHA256*/String algorithm = "HmacSHA256";/*** 原始数据:*/String data = "helloworld";/*** 随机生成一个Key:* * 首先我们通过KeyGenerator.getInstance* 然后传入算法名称* 得到一个KeyGenerator*/KeyGenerator keyGen = KeyGenerator.getInstance(algorithm);/*** 我们通过generateKey获得一个SecretKey*/SecretKey skey = keyGen.generateKey();/*** 打印Key:* * 然后我们通过getEncoded把SecretKey转换为byte数组*/byte[] key = skey.getEncoded();/*** 然后打印出来*/System.out.println(bytesToHexString(key));/*** 用这个Key来计算:* * 最后我们可以通过key来计算hmac值*/byte[] result = hmac(algorithm, skey, data.getBytes());/*** b286b2267357dd475a281bf68d72e88d68586767* 哈希是20个字节的数组*/System.out.println(bytesToHexString(result));}
}
最后我们总结一下:1. Hmac就是把Key混入摘要的一种算法2. 他可以配合MD5,SHA-1等摘要算法3. 我们需要注意的是,Hmac并不是重新发明的一种摘要算法,而需要配合MD5,SHA-1等摘要算法4. 最后计算的摘要长度和原摘要算法的长度是相同的

Hmac - Java加密与安全相关推荐

  1. HmacSHA1 js和java加密的结果不一致

    解释 HmacSHA1,我的前端js加密后和后端java加密后加密串不一致,也不知道啥原因.经过一系列尝试,最后前端用crypto里的加密才和后端的保持一致,个人理解是CryptoJS里的hmac加密 ...

  2. Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

    [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao) 2.简单的例子 ...

  3. Java加密与解密笔记(三) 非对称加密

    非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...

  4. Java 加密 AES 对称加密算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...

  5. Java加密解密入门

    一 概述 Java加密解密概述 Java安全领域分为四个部分:JCA-Java加密体系结构:JCE-Java加密扩展包:JSSE-Java安全套接字扩展包:JAAS-Java鉴别与安全服务. JCA提 ...

  6. java中解密技术是什么_详解Java 加密解密技术的分类和归纳

    这篇文章主要介绍了Java加密解密基础分类方法汇总的相关资料,需要的朋友可以参考下 Java 加密解密基础: 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信 ...

  7. java 加密解密编程,java 加密解密容易实现

    当前位置:我的异常网» 编程 » java 加密解密容易实现 java 加密解密容易实现 www.myexceptions.net  网友分享于:2013-10-27  浏览:3次 java 加密解密 ...

  8. 安卓逆向_25 --- 密码学 之 《Java加密与解密的艺术》

    <Java加密与解密的艺术>中文 PDF版 :https://www.jb51.net/books/65048.html 1. 密码学应用 :https://www.bilibili.co ...

  9. Java 加密解密之对称加密算法PBE

    JAVA  加密解密系列 Java 加密解密基础 Java byte数组与十六进制字符串互转 Java BASE64加密解密 Java 加密解密之消息摘要算法(MD5 SHA MAC) Java 加密 ...

最新文章

  1. C++ 笔记(30)— 友元函数与友元类
  2. 利用html5标签audio在不同客户端下适配播放音频
  3. SOC(网络安全管理平台)
  4. 大学物理实验电学基本参数的测量实验报告_大学物理电学实验报告
  5. 【AI视野·今日NLP 自然语言处理论文速览 第四期】Wed, 9 Jun 2021
  6. thrift使用传输协议TCompactProtocol - xiaoshe的专栏 - 博客频道 - CSDN.NET
  7. java 解析标记语言_Java XML可扩展标记语言(eXtensible Markup Language)
  8. linux每日命令(13):more命令
  9. oracle应用技术期末考试,Oracle数据库应用技术
  10. JQuery EasyUI 扩展方法 日期控件 设置时间段函数
  11. 单片机长按开关怎么控制_时控开关控制电铃怎么接线?
  12. android打开wav声音
  13. 小米pro安装win10系统
  14. Filed II 自定义二维曲面超声换能器阵列
  15. VMware vSphere核心组件
  16. JAVA社招,让老板心动的简历原来是这样
  17. 【读书笔记】UML+OOPC嵌入式C语言开发精讲-认识对象
  18. 诊所管理系统方案/案列/APP/软件/小程序/网站
  19. 土壤水分传感器的工作原理和应用环境
  20. 享元模式(Flyweight模式)

热门文章

  1. 《JavaScript 高级程序设计》 7.5 常用模式
  2. Form表单标签的Enctype属性的编码格类型
  3. 【Java线程】线程协作
  4. JAVASCRIPT实现绚丽TAB选项卡
  5. 使用canvas绘制楼梯(canvas直线绘制练习)
  6. nginx之线上CDN的rewrite规则修改
  7. 架构书籍推荐:Java中高级、架构师值得一读!
  8. Mac之当前目录打开终端
  9. DataGridView数据更新至数据库-逐条更新
  10. Mac下Virtual Box Host-Only网络配置