Java摘要算法学习日记

news/2024/11/24 13:30:36/

Java摘要算法学习日记

  • 摘要的作用
  • MD家族的摘要算法
  • sha(安全散列算法)
  • MAC(含有秘钥的散列函数算法)

摘要的作用

  • 摘要的作用主要是验证数据的完整性
    举个例子:
    commons Codec下载页我们去apche下载jar包时网页上有个sha512的链接,点击后会看到一串sha512摘要值
b6d517db15aedc424d112b8f3282c63f56aae66adaf317baf9853da65e291eb03fb5da51792aa437c7fdce63f6685c75373265e2a035b51e7525048716d7bfe3

当我们下载玩文件后查看一下文件的sha512摘要值,如果和网站上给出的一样则说明文件是完整的,否则文件就是不完整的。

MD家族的摘要算法

算法摘要长度实现方
MD2128JDK
MD4128Bouncy Castle
MD5128JDK

Bouncy Castle是对JDK的扩展补充、commons Codec是对jdk已有的算法提供简便操作

如果是计算MD5或MD2:选择用apche commons Codec提供的实现会比较好,因为它基于原生jdk上给我们进行封装,api比较友善

/*
apche commons Codec提供便捷计算MD5和MD2方法
*/
String sc = "study security md";
System.out.println("cc  md5Hex:"+ DigestUtils.md5Hex(sc));
System.out.println("cc  md2Hex:"+DigestUtils.md2Hex(sc));

md摘要的使用场景

  • 实现用户密码的加密存储
    利用摘要算法对用户密码加密存储过程

sha(安全散列算法)

算法摘要长度实现方
SHA-1160JDK
SHA-224224Bouncy Castle
SHA-256256JDK
SHA-384384JDK
SHA-512512JDK
//apche commons Codec提供便捷计算sha1
System.out.println("cc1 sha1:"+ DigestUtils.sha1Hex(sc));
System.out.println("cc2 sha1:"+ DigestUtils.sha1Hex(sc.getBytes()));

sha算法的使用场景

  • 网站安全证书的指纹
    查看网站安全证书内容- 消息鉴别
    sha消息鉴别过程

MAC(含有秘钥的散列函数算法)

它是一个sha和md的缝合怪,同时包含秘钥

算法摘要长度实现方
HmacMD2128JDK
HmacMD4128Bouncy Castle
HmacMD5128JDK
HmacSHA-1160JDK
HmacSHA-224224Bouncy Castle
HmacSHA-256256JDK
HmacSHA-384384JDK
HmacSHA-512512JDK
String key = "aaaaaaaaaa";
//commons codec做HMAC-MD5摘要
String hmacMd5 = new HmacUtils(HmacAlgorithms.HMAC_MD5, key).hmacHex(sc);
System.out.println("cc  hmacMD5Hex:"+ hmacMd5);
  • 消息鉴别
    mac消息鉴别过程

http://www.ppmy.cn/news/37883.html

相关文章

代码随想录算法训练营第四十九天| 121 买卖股票的最佳时机 122 买卖股票的最佳时机II

代码随想录算法训练营第四十九天| 121 买卖股票的最佳时机 122 买卖股票的最佳时机II LeetCode 121 买卖股票的最佳时机 题目: 121.买卖股票的最佳时机 动规五部曲: 确定dp数组以及下标的含义 **dp[i][0] 表示第i天持有股票所得最多现金 ** 确定递推公式 dp[…

超详细WindowsJDK1.8与JDK11版本切换教程

文章目录一、JDK生效原理二、安装配置JDK11三、切换JDK11版本四、查看切换JDK11版本是否成功五、再次切换至JDK8版本六、查看切换JDK8版本是否成功一、JDK生效原理 想必大家都在为如何流畅的切换JDK版本问题而来,那么在此篇文章开始之前,首先我们来思考一…

蓝桥杯:阶乘约数

蓝桥杯:阶乘约数https://www.lanqiao.cn/problems/1020/learning/ 目录 题目描述 填空题:答案是 39001250856960000 题目分析 AC代码(Java) 暴力 线性筛 题目描述 填空题 定义阶乘 n!123⋅⋅⋅n。 请问 100! (100 的阶乘)有…

vue3+ts+vite+electron搭建桌面应用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 vue3tsviteelectron搭建桌面应用前言一、版本背景介绍二、过程1. 搭建vitevue-ts的项目2. 接入electron3. electron启动4. electron打包5. 项目目录梳理前言 提示&#xff1…

腾讯后端开发实习一面(24届)

毫无准备的腾讯一面,最近都在忙比赛去了,突然收到腾讯一面的邮件,直接没准备。。。 总结,除了Vue其他的都挺好,但是腾讯hr为啥Vue面我四个问题,不是面的后端开发吗,好难呀,都只能随…

Spring AOP:理解动态代理和 Advice

ProxyFactory cglib代理解析 jdk动态代理 动态代理技术在Spring中进行了封装,封装出来的类叫做ProxyFactory,表示是创建一个代理对象的一个工厂,比jdk动态代理和cglib代理更加方便,比如: public class UserService {public void test(){System.out.println("test...&qu…

2023年 合肥市庐阳区信息学竞赛区赛 小学组

2023年 合肥市庐阳区信息学竞赛区赛 小学组T1.快递盒(box) 问题描述 快递盒底面长为 a、宽为 b,货品包装的底面为正方形,边长为 c。快递盒同货品包装的高度一致,货品包装边要求同快递盒边平行。请问快递盒最多可以装入多少件货品? 输入格式 一行,三个整数 a、b 和 c,意…

Golang每日一练(leetDay0022)

目录 64. 最小路径和 Minimum Path Sum 🌟🌟 65. 有效数字 Valid Number 🌟🌟🌟 66. 加一 Plus One 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 …