首页 技术 正文
技术 2022年11月16日
0 收藏 323 点赞 2,448 浏览 1596 个字

HMAC(Hash Message Authentication Code)哈希消息授权码,它在消息摘要算法(例如MD5,SHA系列算法)的基础上,使用密钥对消息摘要进行加密.它相当于一个马甲,内里可以使用MD5,SHA1,SHA256,SHA384,SHA512等Message Digest算法,在生成的消息摘要的基础上再多一道加密的工序.所以HMAC包括,HmacMD5,HmacSHA1,HmacSHA384,HmacSHA512等种类.正是因为HMAC只是一个马甲,它才有了很大的灵活性,底层的MessageDigest算法哪个好用哪个,说用哪个就用哪个,拆卸方便.

HMAC还是很有用处的,在实践中它通常是这么用的:

(1)客户端向服务器发起请求,访问登录页面.这时服务器生成一个密钥,把这个密钥存储在session之中,然后将密钥返回给客户端.

(2)客户端填写登录表单,点击提交后,运行HMAC算法,根据密钥将用户信息加密后post到服务器.

(3)服务器读取数据库中的密码,用HMAC将密码和session中的密钥进行加密产生密码的密文,将密文与用户提交的进行比较.

在这个过程中,入侵者可以做的是抓包抓到服务器发给客户端的密钥和客户端提交的密文.只有密钥没有密码就没法进行加密,有密文也无法破解密码.并且,密钥放在session中,每次登陆都不一样,安全性很高.服务器向客户端返回密钥时,可以使用base64将byte[]类型的密钥转化成字符串.

下面给出java中如何使用HMAC进行加密解密.

import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.util.Base64;import javax.crypto.KeyGenerator;import javax.crypto.Mac;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;public class HAMC {    /**     * 定义加密方式 MAC算法可选以下多种算法     *     * <pre>     * HmacMD5     * HmacSHA1     * HmacSHA256     * HmacSHA384     * HmacSHA512     * </pre>     *     * @throws NoSuchAlgorithmException     * @throws InvalidKeyException     */    public static void main(String[] args)            throws NoSuchAlgorithmException, InvalidKeyException {        byte[] srcData = "weidiao haha".getBytes();        final String algorithm = "HmacMD5";        KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);        byte[] key = keyGenerator.generateKey().getEncoded();        SecretKey secretKey = new SecretKeySpec(key, algorithm);        Mac mac = Mac.getInstance(secretKey.getAlgorithm());        mac.init(secretKey);        byte[] data = mac.doFinal(srcData);        System.out.println("密钥:" + Base64.getEncoder().encodeToString(key));        System.out.println("密文:" + Base64.getEncoder().encodeToString(data));    }}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,997
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,356
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,139
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848