Hmac - Java加密与安全
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加密与安全相关推荐
- HmacSHA1 js和java加密的结果不一致
解释 HmacSHA1,我的前端js加密后和后端java加密后加密串不一致,也不知道啥原因.经过一系列尝试,最后前端用crypto里的加密才和后端的保持一致,个人理解是CryptoJS里的hmac加密 ...
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
[最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao) 2.简单的例子 ...
- Java加密与解密笔记(三) 非对称加密
非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...
- Java 加密 AES 对称加密算法
版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...
- Java加密解密入门
一 概述 Java加密解密概述 Java安全领域分为四个部分:JCA-Java加密体系结构:JCE-Java加密扩展包:JSSE-Java安全套接字扩展包:JAAS-Java鉴别与安全服务. JCA提 ...
- java中解密技术是什么_详解Java 加密解密技术的分类和归纳
这篇文章主要介绍了Java加密解密基础分类方法汇总的相关资料,需要的朋友可以参考下 Java 加密解密基础: 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信 ...
- java 加密解密编程,java 加密解密容易实现
当前位置:我的异常网» 编程 » java 加密解密容易实现 java 加密解密容易实现 www.myexceptions.net 网友分享于:2013-10-27 浏览:3次 java 加密解密 ...
- 安卓逆向_25 --- 密码学 之 《Java加密与解密的艺术》
<Java加密与解密的艺术>中文 PDF版 :https://www.jb51.net/books/65048.html 1. 密码学应用 :https://www.bilibili.co ...
- Java 加密解密之对称加密算法PBE
JAVA 加密解密系列 Java 加密解密基础 Java byte数组与十六进制字符串互转 Java BASE64加密解密 Java 加密解密之消息摘要算法(MD5 SHA MAC) Java 加密 ...
最新文章
- C++ 笔记(30)— 友元函数与友元类
- 利用html5标签audio在不同客户端下适配播放音频
- SOC(网络安全管理平台)
- 大学物理实验电学基本参数的测量实验报告_大学物理电学实验报告
- 【AI视野·今日NLP 自然语言处理论文速览 第四期】Wed, 9 Jun 2021
- thrift使用传输协议TCompactProtocol - xiaoshe的专栏 - 博客频道 - CSDN.NET
- java 解析标记语言_Java XML可扩展标记语言(eXtensible Markup Language)
- linux每日命令(13):more命令
- oracle应用技术期末考试,Oracle数据库应用技术
- JQuery EasyUI 扩展方法 日期控件 设置时间段函数
- 单片机长按开关怎么控制_时控开关控制电铃怎么接线?
- android打开wav声音
- 小米pro安装win10系统
- Filed II 自定义二维曲面超声换能器阵列
- VMware vSphere核心组件
- JAVA社招,让老板心动的简历原来是这样
- 【读书笔记】UML+OOPC嵌入式C语言开发精讲-认识对象
- 诊所管理系统方案/案列/APP/软件/小程序/网站
- 土壤水分传感器的工作原理和应用环境
- 享元模式(Flyweight模式)