HMAC加密的消息摘要码

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));
    }
}
时间: 2024-10-14 00:13:25

HMAC加密的消息摘要码的相关文章

HMAC哈希消息认证码

收藏 137 14 hmac 编辑 HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出. 中文名 哈希消息认证码 外文名 Hash-based Message Authentication Code 缩    写 HMAC 概述  HMAC是密钥相关的哈希运算 运算作用 验证TPM接受的授权数 目录 1 简介 ? 运算作用 ? 算法表示 ? HMAC运算步骤 ? HMAC的应用 2 典型应用 ? 认证流程 ? 安全性浅析 简介

[Java 安全]消息摘要与数字签名

消息摘要 算法简述 定义 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生.如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了.因此消息摘要保证了消息的完整性.消息摘要采用单向Hash 函数将需加密的明文"摘要"成一串密文,这一串密文亦称为数字指纹(Finger Print).它有固定的长度,且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致.这样这串摘要便可成为验证明文是否是

关于消息认证码

我的认识 消息认证码 英文为Message Authentication Code,也称消息识别码等不同称呼.其主要功能是验证消息的真实性. 消息认证模型如下: HMAC(Hash-based Message Authentication Code) HMAC是一种使用单向散列函数构建MAC的方法,其中H就是Hash的意思. HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HMAC,如果将来设计出的新的单向散列函数,也同样可以使用. 使用SHA-1.SHA-22

JDK自带方法实现消息摘要运算

啊,有点小注释,懒得介绍了,就贴个代码吧,大意理解就可以了. 1 package jdbc.pro.lin; 2 3 import java.security.InvalidKeyException; 4 import java.security.MessageDigest; 5 import java.security.NoSuchAlgorithmException; 6 7 import javax.crypto.KeyGenerator; 8 import javax.crypto.Ma

密码学初级教程(二)公钥密码RSA与单向散列函数与消息认证码

求离散对数非常困难 RSA是Ron Rivest/Adi Shamir/Leonard Adleman的姓氏首字母组成. RSA可以被用于公钥密码和数字签名. RSA加密:密文=明文EmodN(E和N为公钥) RSA解密:明文=密文DmodN(D和N为私钥) 对RSA的破解: 暴力破解:暴力破解的难度会随着D的长度增加而变大,当D足够长时,就不可能在现实的时间内通过暴力破解找出D. 混合密码系统:用对称密码提高速度,用公钥密码保护会话密钥 混合密码系统的组成机制: 用对称密码加密消息 通过伪随机

消息摘要java.security.MessageDigest

这是一种与消息认证码结合使用以确保消息完整性的技术.主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA-1,jdk1.5对上面都提供了支持,在java中进行消息摘要很简单, java.security.MessageDigest提供了一个简易的操作方法: /** *MessageDigestExample.java *Copyright 2005-2-16 */ import java.security.Message

散列函数、消息摘要与数字签名

一, 散列函数(Hash function) 散列函数:任何一种能将任意大小数据映射为固定大小数据的函数,都能被称为散列函数.散列函数的返回值称为散列值.散列码,摘要或者简单散列. 也就是说散列函数能将任意长度的输入变换成固定长度的输出,该输出就是散列值.散列值空间通常远小于输入的空间. 散列函数的一些特性: 消息的长度不受限制 确定性:对于相同的输入(根据同一函数),它必须始终生成相同的散列值,如果两个散列值是不相同的,那么这两个散列值的原始输入也是不相同的, 但是对于不同的输入可能会散列成相

密码学初级教程(五)消息认证码MAC-Message Authentication Code

密码学家工具箱中的6个重要的工具: 对称密码 公钥密码 单向散列函数 消息认证码 数字签名 伪随机数生成器 MAC能识别出篡改和伪装,也就是既可以确认消息的完整性,也可以进行认证. 消息认证码的输入包括任意长度的消息和一个发送者与接受者之间共享的密钥,它可以输出固定长度的数据,这个数据就是MAC. 消息认证码是一种与密钥相关联的单向散列函数. 消息认证码的应用实例 SWIFT(Society for Wordwide Interbank Financial Telecommunication,环

SIP协议应答消息状态码详解

SIP应答消息状态码与功能 类型 状态码 状态说明 临时应答(1XX) 100 Trying 正在处理中 180 Ringing 振铃 181 call being forwarder 呼叫正在前向 182 queue 排队 181* session progress 会话进行 会话成功(2XX) 200 OK 会话成功 重定向(3XX) 300 multiple 多重选择 301 moved permanently 永久移动 302 moved temporaily 临时移动 305 use