MD5 消息摘要(数字摘要)

它是把一个文本/文件 通过摘要函数(hash函数)计算出一个结果。然后把文本/文件和摘要结果一同发给接受者

接受者接收到文件之后,也进行摘要,把两个摘要结果进行对比。如果一致就说明文本/文件和摘要是一致的。

问题

假设A把文件和摘要发给B,中途被C截获了。C把文件改了,同时把改后的文件进行摘要。然后把改后的文件和重新生成的摘要发给B。

B收到结果之后,进行摘要,对比发现,是一致的。但是此时文件是被篡改过的,B也不知道。接收方并不能察觉到数据被篡改。

所以说,普通的消息摘要不能验证身份和防篡改!!

解决这个问题,我们可以使用MAC(消息认证码(带密钥的hash函数))去解决。

MAC (全称 Message Authentication Code),消息认证码(带密钥的Hash函数)

通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具,在发送数据之前,发送方首先使用通信双方协商好的散列函数计算其摘要值。在双方共享的会话密钥作用下,由摘要值获得消息验证码。

之后,它和数据一起被发送。接收方收到报文后,首先利用会话密钥还原摘要值,同时利用散列函数在本地计算所收到数据的摘要值,并将这两个数据进行比对。若两者相等,则报文通过认证。

计算摘要的时候,需要一个秘钥key,没有秘钥key就无法计算。

注意:相同的消息,不同的key,摘要结果不同。

java1.8代码演示

下面使用Java(1.8.0_144)演示计算apache-tomcat-8.5.23.zip文件的消息摘要

packagecom.security.dgst;importjava.nio.file.Files;importjava.nio.file.Paths;importjava.security.Key;importjavax.crypto.Mac;importjavax.crypto.spec.SecretKeySpec;importorg.apache.commons.codec.binary.Hex;public classMacTest {//秘钥(必须要是通信双方共享的)

static final String STR_KEY = "266f5fe18e714688a083df4ca9f78064";/*** 其中,Mac.getInstance支持的算法有:HmacMD5、HmacSHA1、HmacSHA256等等

* 全部支持的算法见官方文档:

*https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#Mac*/

public static byte[] mac(String algorithm, Key key, byte[] data) throwsException {

Mac mac=Mac.getInstance(algorithm);//这里是关键,需要一个key(这里就是和普通的消息摘要的区别点)

mac.init(key);byte[] result =mac.doFinal(data);returnresult;

}public static void main(String[] args) throwsException {byte[] data = Files.readAllBytes(Paths.get("c:/tmp/apache-tomcat-8.5.23.zip"));

Key key= new SecretKeySpec(STR_KEY.getBytes(), "");//使用MD5算法计算摘要

byte[] md5Digest = mac("HmacMD5", key, data);//使用SHA256算法计算摘要

byte[] shaDigest = mac("HmacSHA256", key, data);//把摘要后的结果转换成十六进制的字符串(也可以使用Base64进行编码)

System.out.println(Hex.encodeHexString(md5Digest));

System.out.println(Hex.encodeHexString(shaDigest));

}

}

Mac.getInstance(algorithm)  参数algorithm可以支持的值除了参考官方文档,还可以通过如下代码得出:

Security.getAlgorithms("Mac").forEach(System.out::println);

Java8中,输出结果如下:

PBEWITHHMACSHA512 PBEWITHHMACSHA224 PBEWITHHMACSHA256 HMACSHA384 PBEWITHHMACSHA384 HMACSHA256 HMACPBESHA1 HMACSHA224 HMACMD5 PBEWITHHMACSHA1 SSLMACSHA1 HMACSHA512 SSLMACMD5 HMACSHA1

输出结果为:

ce078fe3134fa8b50c595e4e984f88e0

d90eec24b04b81cd235ff8d4e5a9aeb00183e253e44b6ed763328ff97f856200

我们可以使用OpenSSL,加上上面使用的秘钥key,计算摘要。

对比结果,发现是一致的。

java mac 加密_Algorithm:Java加密解密之MAC(消息认证码)相关推荐

  1. JAVA加密解密之消息认证码算法(Message Authentication Code,MAC)

    消息认证码算法简介 在密码学中,消息认证码(英语:Message authentication code,缩写为MAC),又译为消息鉴别码.文件消息认证码.讯息鉴别码.信息认证码,是经过特定算法后产生 ...

  2. 浅浅学习一下消息认证码MAC(Message Authentication Code)

    1.MAC这玩意是什么? 提起这个MAC我就不得不说一下消息摘要. 什么是消息摘要? 消息摘要是把任意长度的输入揉和而产生长度固定的伪随机输出的算法.消息摘要的主要特点有: ①无论输入的消息有多长,计 ...

  3. 【信息安全】MD(消息摘要)、MAC(消息认证码)、数字签名的区别

    MD MAC 数字签名 是否对摘要加密 不加密 加密 加密 对摘要进行加密的算法 无 对称加密 公钥加密 是否可以防止耍赖 否 否 是 从上表可以看出,从MD到MAC再到数字签名,它的安全性越来越高. ...

  4. HMAC(1)消息认证码MAC算法

    1. 定义 MAC(Message Authentication Code) 算法是以消息本身和密钥作为输入,经过一系列计算产生一个消息哈希的算法,用来保证消息的数据完整性和消息的数据源认证. 2. ...

  5. 消息认证码(MAC)

    消息认证码(MAC,Message Authentication Code) 在无线通信中,为了防止攻击者更改消息内容,需要验证消息的完整性.消息认证码(Message Authentication ...

  6. 1、【java数据安全】数据安全之加密解密(base64、MD、SHA、DES、AES、IDEA、PBE、DH、RSA、EIGamal)、数字签名(DSA、ECDSA)和数字证书介绍、应用示例详细介绍

    java数据安全 系列文章 1.[java数据安全]数据安全之加密解密(base64.MD.SHA.DES.AES.IDEA.PBE.DH.RSA.EIGamal).数字签名(DSA.ECDSA)和数 ...

  7. java 加密 数字_java 加密数字签名

    1)消息摘要: 这是一种与消息认证码结合使用以确保消息完整性的技术. 主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA- ...

  8. java祖冲之加密算法_对称加密和非对称加密

    一  非对称加密 非对称加密和解密花费的时间长 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey),一般使用公钥进行加密,使用私钥进行解密. 常见的非对称加密 ...

  9. java中使用MD5进行加密

         在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希望能抛砖引玉. (一)消 ...

最新文章

  1. 【Netty】NIO 选择器 ( Selector ) 简介
  2. 开发基础之使用git把项目提交到github托管
  3. php get 数据类型,PHP基础-数据类型-integet
  4. 面试题10.3-变态跳台阶
  5. 教你制作自己的linux
  6. 17个C语言可以做的小案例项目
  7. 傅里叶变换复数形式的实部代表什么_二维傅里叶变换与逆变换基于Unity的实现...
  8. 网站全国公安机关互联网站安全服务平台备案流程
  9. android apk安装包 华为提示安装包无效或与操作系统不兼容,魅族提示apk仅为测试版,要求下载正式版安装
  10. 软考高级证书考试--信息系统项目管理师--计算题(更新中)
  11. 企业数字化最核心的数据智能,它的价值到底在哪?
  12. 使枚举成功的USB设备成为WINUSB设备
  13. matlab迭代分水岭分割,matlab分水岭分割算法
  14. t480s控制面板打开触摸板_ThinkPad T480s 用户指南V4.0--更换键盘部分
  15. 漫威API直接调用教程
  16. CraftManager for Mac(PS/sketch自动填充神器)特别版
  17. 游戏鼠标的dpi测试软件,自己就可以测试鼠标的DPI
  18. 基于MATLAB的波束成型仿真
  19. B365装服务器系统,七彩虹b365主板安装win7系统及BIOS设置教程(支持8代cpu)
  20. 登录IE时常出现闪退:Internet Explorert停止工作解决办法

热门文章

  1. linux 什么是tty console和tty和串口的关系 如何在linux下查看tty对应哪个串口
  2. python 读取pdf cid_python使用pdfminer解析pdf文件的方法示例
  3. 鸡兔同笼。已知鸡兔总头数为h,总脚数为f,求鸡兔各有多少只?
  4. 人工智能产业链,是时候梳理一下了!
  5. PHP学习笔记好(待完善)
  6. sybase 快速删除大数据库的手顺方法
  7. 每天一道算法题系列十七之电话号码的字母组合
  8. 番茄社区多门店系统介绍
  9. Prometheus普罗米修斯调研笔记
  10. Curator的基本使用