加密算法 MD5 和 SHA 的 JAVA 实现
首先先简单的介绍一下MD5 和 SHA 算法
然后看一下在 java.security.MessageDigest (信息摘要包下) 如何分别实现 md5 加密 和 sha 加密
最后在看一下 使用httpclient包 依赖下的 commons-codec-org. 包 下的apache.commons.codec.digest.DigestUtils 这个工具类 是如何快速实现md5 和 SHA 加密的
还有spring包下的
org.springframework.util.DigestUtils; DigestUtils工具
MD5 算法
MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。
MD5,用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,常用于文件校验。校验?不管文件多大,经过MD5后都能生成唯一的MD5值。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
MD5 是单向的 不可逆
SHA算法
安全哈希算法(Secure HashAlgorithm)主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(DigitalSignature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。该算法经过加密专家多年来的发展和改进已日益完善,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种"指纹"或是"摘要"所以对散列值的数字签名就可以视为对此明文的数字签名。
就安全性而言 sha要比md5 安全
md5 是 一个128位(16字节)的散列值(hash value)
sha-1 是 160位 其余还有 sha2.....
请参考
https://www.jianshu.com/p/d6b491b235fe
https://blog.csdn.net/miaomiaowyj/article/details/79976653
https://blog.csdn.net/jiangyu1013/article/details/73290371
java.security.MessageDigest (信息摘要包下) 如何分别实现 md5 加密 和 sha 加密
- package com.io.digest;
- import java.math.BigInteger;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- /**
- * SHA md5 的 实现
- * 使用 java.security.MessageDiges
- * @author lqf
- *
- */
- public class Test01 {
- public static final String KEY_MD5 = "MD5";
- public static final String KEY_SHA = "SHA";
- public static void main(String[] args) {
- System.out.println("md5加密后的数据"+md5("123"));
- System.out.println("sha加密后的数据"+SHA("123"));
- }
- /**
- * 使用md5的算法进行加密
- */
- public static String md5(String data) {
- byte[] bytes01 = null ;
- byte[] bytes02 = null ;
- try {
- //返回实现指定摘要算法的MessageDigest对象。
- MessageDigest digest = MessageDigest.getInstance(KEY_MD5);
- bytes01= data.getBytes(); //将字符串转为 字节数组
- digest.update(bytes01); //使用指定的字节数组更新摘要。 可以对这个字节数组设置偏移量 可以不写这个操作
- bytes02= digest.digest();//通过执行最后的操作(如填充 )来完成哈希计算。
- //上面的三步 可以用一步代替
- //bytes02=digest.digest(data.getBytes()); //可不不要 update 直接使用 digest(byte[] byte)的方法
- } catch (NoSuchAlgorithmException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- String md5code = new BigInteger(bytes02).toString(16); // 转为 16进制数
- // 如果生成数字未满32位,需要前面补0
- for (int i = 0; i < 32 - md5code.length(); i++) {
- md5code = "0" + md5code;
- }
- return md5code;
- }
- /**
- * SHA 加密
- * @param data
- * @return
- */
- public static String SHA(String data) {
- byte[] digest= null ;
- try {
- //和上面的步骤一模一样就是改一下 指定的算法 这里把几个步骤和一起了
- digest = MessageDigest.getInstance(KEY_SHA).digest(data.getBytes());
- } catch (NoSuchAlgorithmException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- String shacode=new BigInteger(1, digest).toString(32); //32 进制数字
- return shacode;
- }
- }
使用httpclient包 依赖下的 commons-codec-org. 包 下的apache.commons.codec.digest.DigestUtils 这个工具类 快速实现md5 和 SHA 加密的
DigestUtils这个工具包 对 java包下的messageDigest 进行了 扩展和封装 使得加密算法 实现起来变得异常简单
包的依赖结构
通过这些方法 可以拿来即用
这个是 Spring - core 下的 utils工具类 扩展的DigestUtils 工具 可以看出来 没有上面的哪一个强大 没有 sha
不过值得注意的是 如果你要想用spring包下的 digestUtils工具的话 导包的时候一定要看清楚啊 不要和上面的路径弄混了 切记切记 !!!!
最后 看一下 这俩个包的混合使用
第一个是 spring的 第二个 是 commons的 你得出什么结论了吗? (#^.^#)
加密算法 MD5 和 SHA 的 JAVA 实现的更多相关文章
- 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
1.Java的安全体系架构 1.1 Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...
- Java的单向加密算法MD5和SHA——加密和解密
出自:http://www.cnblogs.com/onetwo/p/3875551.html 1.JDK中MD5和SHA加密的主要类 在JDK6.0中,与MD5与SHA密切相关的几个类的类图如下: ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完毕測试代码)
MD5和RSA是网络传输中最经常使用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,仅仅能加密而不能解密. ...
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha 加密解密,曾经是我一 ...
- 加密算法中BASE64、MD5、SHA、HMAC等之间的区别
http://blog.csdn.net/lplj717/article/details/51828692 根据项目需要了解了一下几种加密算法(参考其他博客),内容简要介绍BASE64.MD5.SHA ...
- BASE64与单向加密算法MD5&SHA&MAC
言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书. 如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Diges ...
- 本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。
BASE64编码算法不算是真正的加密算法. MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法.我们通常只把他们作为加密的基础.单纯的以上 ...
- JAVA加密技术-----MD5 与SHA 加密
关于JAVA的加密技术有很多很多,这里只介绍加密技术的两种 MD5与 SHA. MD5与SHA是单向加密算法,也就是说加密后不能解密. MD5 ---信息摘要算法,广泛用于加密与解密技术,常用于文件校 ...
随机推荐
- Oracle数据库-primary key/foreign key和references关系
主要介绍一下个人对主键(primary key).外键(foreign key).候选键(Candidate key).超键(super key).references的总结 概念: 主键:用户选择元 ...
- Vue 相关开源项目库汇总
element ★9395 - 饿了么出品的Vue2的web UI工具套件 Vux ★6835 - 基于Vue和WeUI的组件库 vueAdmin ★569 - 基于vuejs2和element的简单 ...
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_15-认证接口开发-Redis配置
4.2 Redis配置 4.2.1 安装Redis 1.安装Redis服务 下载Windows版本的redis:https://github.com/MicrosoftArchive/redis/ta ...
- 使用python3脚本部署mariadb主从架构
环境准备 一个脚本自动部署master服务 另一个部署slave服务 关闭主从节点的防火墙 以及事先设置好root远程登陆的权限. master import paramikossh=paramiko ...
- java书籍推荐转
http://blog.csdn.net/chaozhi_guo/article/details/51274634 一.<深入理解Java虚拟机:JVM高级特性与最佳实践> 如果你不满足于 ...
- 使用 ServiceStack.Text 序列化 json的实现代码
相信做 .net 开发的朋友经常会遇到 json 序列化这样的需要,今天发篇文章总结下自己使用ServiceStack.Text 来序列化 json.它的速度比 Newtonsoft.Json 快很多 ...
- 第二章 身份验证——《跟我学Shiro》
转发:https://www.iteye.com/blog/jinnianshilongnian-2019547 目录贴:跟我学Shiro目录贴 身份验证,即在应用中谁能证明他就是他本人.一般提供如他 ...
- iOS-常见问题(错误和警告)
1.storyboard连线问题 产生原因:将与storyboard关联的属性删除了,但是storyboard中还保持之前所关联的属性. 解决:取消关联就没事了. 2.XXXXX ...
- sonar:soanrqube接口api
背景: jenkins+sonar集成了代码扫描,但是发出的邮件不管项目质量是通过还是失败,每次邮件的标题都是jenkins的构建状态,所以需要获取sonar中该项目的扫描结果. 解决: 在sonar ...
- 是什么在阻止我们学习unity2019?
背景 时过境迁,这是一篇老文,写于2019年5月. 在学习最新的unity ecs过程中,以及学习最新的effect 时,在迈出第一步的时候即遭遇一些困难(学习和测试环境搭建不起来,有时候真的很无语) ...