Java 实现sha_加密算法 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.....

请参考

java.security.MessageDigest   (信息摘要包下) 如何分别实现  md5 加密 和 sha 加密

2d9848d1eb16d2ed818ef10df89e49cb.png

b7c48a0b4a3b88c7949d77fb14690c72.png

packagecom.io.digest;importjava.math.BigInteger;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;/*** SHA md5 的 实现

* 使用 java.security.MessageDiges

*@authorlqf

**/

public classTest01 {public static final String KEY_MD5 = "MD5";public static final String KEY_SHA = "SHA";public static voidmain(String[] args) {

System.out.println("md5加密后的数据"+md5("123"));

System.out.println("sha加密后的数据"+SHA("123"));

}/*** 使用md5的算法进行加密*/

public staticString 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;

}returnmd5code;

}/*** SHA 加密

*@paramdata

*@return

*/

public staticString 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 进制数字

returnshacode;

}

}

使用httpclient包  依赖下的 commons-codec-org.  包 下的apache.commons.codec.digest.DigestUtils 这个工具类 快速实现md5 和 SHA 加密的

DigestUtils这个工具包 对 java包下的messageDigest 进行了 扩展和封装  使得加密算法 实现起来变得异常简单

包的依赖结构

5556ba9c3e014465d257180fe7098d34.png

3428cb9941e7c00bd57308c3098af9f5.png

8a33e864dc194e5f179d9b7030ab75ec.png

通过这些方法 可以拿来即用

2b7c52b96c179d18b8d113f398a51bb8.png

这个是 Spring - core 下的 utils工具类 扩展的DigestUtils 工具    可以看出来 没有上面的哪一个强大  没有 sha

不过值得注意的是 如果你要想用spring包下的 digestUtils工具的话   导包的时候一定要看清楚啊   不要和上面的路径弄混了  切记切记 !!!!

db28ab57ac4d629c06707cab589b0234.png

最后 看一下 这俩个包的混合使用

第一个是 spring的  第二个 是 commons的     你得出什么结论了吗?  (#^.^#)

87b983e57464e1eef09c9172128e1ef6.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java loadonstartup_java的web配置文件的“load-on-startup0/load-on-startup”一个问题

展开全部load-on-startup标记容器是否32313133353236313431303231363533e78988e69d8331333365643662在启动的时候实例化并调用其init()方法的优先级。它的值表示 servlet应该被载入的顺序。当值为0或者大于0时&#xff0c;表示容器在应用启动时就加载并初始化这个servlet。.如…

java隋唐演义游戏下载_JAVA多线程

第一节 多线程背景知识介绍多线程作用&#xff1a;可以帮助简化模型&#xff0c;还能编写强大的代码。进程与线程的基础概念&#xff1a;Eclipse QQ都属于进程。进程是程序(任务)的执行过程&#xff0c;它持有资源(共享内存、共享文件)和线程。它包含两点&#xff1a;1.动态性&…

packageinfo.java_package-info.java文件详解

package-info.java文件详解一、pacakge-info.java介绍pacakge-info.java是一个Java文件&#xff0c;可以添加到任何的Java源码包中。pacakge-info.java的目标是提供一个包级的文档说明或者是包级的注释。pacakge-info.java文件中&#xff0c;唯一要求包含的内容是包的声明语句&…

java classpath设置_Java CLASSPATH设置

Java CLASSPATH设置CLASSPATH: CLASSPATH是一个环境变量&#xff0c;Application ClassLoader使用它来定位和加载.class文件。 CLASSPATH定义路径&#xff0c;以查找不是扩展或Java平台一部分的第三方和用户定义的类。设置CLASSPATH时&#xff0c;请包括所有包含.class文件和JA…

寒武纪芯片创始人:要让AI芯片计算效率提高一万倍

来源&#xff1a; 传感器技术 概要&#xff1a;随着利好政策的不断出台以及行业的持续发展&#xff0c;芯片相关产业站上风口。 随着利好政策的不断出台以及行业的持续发展&#xff0c;芯片相关产业站上风口。而AI芯片独角兽公司寒武纪&#xff0c;也即将入驻雄安新区。e公司记…

JAVA格式化同一天时间间隔_java中时间格式化怎么去时间间隔值

java中时间格式化怎么去时间间隔值关注:61 答案:2 mip版解决时间 2021-01-12 11:52提问者眼泪↓流到叻心里2021-01-11 20:30比如2015-02-03 13:25:55 与 2015-02-04 15:25:55 之间的时间间隔怎么获取最佳答案二级知识专家守給你的承諾2021-01-11 21:46转换成秒-相减取绝对值。…

超美国11倍!麦肯锡176页报告解读数字中国领先全球的秘密

来源&#xff1a;智东西 概要&#xff1a;到2030年&#xff0c;数字化将转变并创造高达45%的行业总收入。 12月4日&#xff0c;麦肯锡发布了长达176页的中国数字经济报告。 报告显示&#xff0c;中国电子商务&#xff08;2016年交易额占全球40%&#xff09;和数字支付&#xf…

卡内基梅隆大学提出基于学习的动作捕捉模型,用自监督学习实现人类3D动作追踪

原文来源&#xff1a;Cornell University Library 作者&#xff1a;Hsiao-Yu Fish Tung、Hsiao-Wei Tung、Ersin Yumer、 Katerina Fragkiadaki 「雷克世界」编译&#xff1a;我是卡布达、哆啦A亮 目前&#xff0c;从单摄像头中进行动作捕捉&#xff08;motioncapture&#xff…

AI智商评测标准专家研讨会邀请,2018年12月20日北京

21世纪以来&#xff0c;人工智能领域陆续爆发很多重要事件。其中最吸引人们眼球的&#xff0c;当属2016年战胜了人类围棋冠军并开始能够从0自我学习的AlphaGo。 10月26日&#xff0c;软银CEO孙正义在沙特阿拉伯举行的未来投资计划大会上称&#xff0c;未来30年内AI的智商&#…

开源神经网络框架Caffe2全介绍

本文作者吴逸鸣&#xff0c;整理自作者在GTC China 2017大会上的演讲&#xff0c;首发于作者的知乎文章。 我个人认为这是一份很值得分享的资料&#xff0c;因为 这应该是第一次使用全中文来讲解Caffe2和FB的AI应用的演讲 观看这次演讲不需要机器学习&#xff0f;神经网络&…

AI指数评论:提防“路灯谬误”,开启全球多方对话

来源&#xff1a;亿欧 概要&#xff1a;技术的单点突破&#xff0c;资本市场的多级繁荣&#xff0c;诸如此类的话题充斥着过去两到三年。然而&#xff0c;在AI时代思考AI&#xff0c;我们需要更宏大的世界观。 技术的单点突破&#xff0c;资本市场的多级繁荣&#xff0c;诸如此…

算法还是算力?周志华微博引爆深度学习的“鸡生蛋,蛋生鸡”问题

来源&#xff1a;AI科技大本营上周&#xff0c;由强化学习加持的AlphaZero&#xff0c;把DeepMind在围棋上的突破成功泛化到其他棋类游戏&#xff1a;8小时打败李世石版AlphaGo&#xff0c;4小时击败国际象棋最强AI——Stockfish&#xff0c;2小时干掉日本象棋最强AI——Elmo&a…

计算机视觉大规模爆发,6大细分领域将撑起725亿元市场

来源&#xff1a;中国经济时报概要&#xff1a;近几年来&#xff0c;随着技术的发展&#xff0c;中国计算机视觉行业发展迅速。近几年来&#xff0c;随着技术的发展&#xff0c;中国计算机视觉行业发展迅速。尤其是2016年下半年&#xff0c;1∶N人脸识别、视频结构化等计算机视…

java项目内存使用率过高排查_项目内存或者 cpu 占用率过高如何排查

前言:小编总结了之前生产环境cpu 占用率过高等问题,小编功力不够深厚,文章如有不对的地方,还望各位大神指正。排查原因&#xff1a;客服反馈说系统访问缓慢一、 在排查问题的过程中针对 CPU 的问题&#xff0c; 使用以下命令组合来排查问题模拟过程:①示例代码&#xff1a;pack…

2017 人工智能+内容生产研究报告【附下载】

来源&#xff1a;亿欧概要&#xff1a;技术进步和产业内生需求&#xff0c;是推动AI开始在内容生产领域应用的两个主要动力。为了弄清AI内容生产进行到何种程度&#xff0c;对内容生产可能产生何种影响&#xff0c;小编撰写了这份《2017 人工智能内容生产研究报告》&#xff0c…

ThreadLocal与Synchronized的用法

来源&#xff1a;http://blog.csdn.net/wl_ldy/article/details/5948779 一.ThreadLocal的用法 ThreadLocal的实现&#xff1a; package com.sodao.lucene; import java.util.Random; public class ThreadLocalTest implements Runnable{ ThreadLocal<Studen…

java程序员面试需要注意什么_Java程序员面试时要注意的一些问题

Java程序员面试的时候会面临各种五花八门的问题&#xff0c;你的第一反应、思维逻辑、思考方法&#xff0c;专业水平决定了企业对你的评价和你的薪资水准&#xff0c;但是除了专业以外还有一些你需要避免出现错误的注意事项&#xff0c;如果很好的避免了&#xff0c;就能帮你在…

“强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识

李杉 编译自 KDnuggets量子位 出品 | 公众号 QbitAI地处加拿大埃德蒙顿的阿尔伯塔大学&#xff08;UAlberta&#xff09;可谓是强化学习重镇&#xff0c;这项技术的缔造者之一萨顿&#xff08;Rich Sutton&#xff09;在这里任教。△ 萨顿萨顿常被称为“强化学习之父”&#xf…

cmd中java编译命令是什么_cmd中java的编译命令——java和javac、javap

如题&#xff0c;首先我们在桌面&#xff0c;开始->运行->键入cmd 回车&#xff0c;进入windows命令行。进入如图所示的画面&#xff1a;可知&#xff0c;当前默认目录为C盘Users文件夹下的Administrator文件夹。一般而言&#xff0c;我们习惯改变当前目录。由于windows有…

Struts2源码阅读(一)_Struts2框架流程概述

1. Struts2架构图 请求首先通过Filter chain&#xff0c;Filter主要包括ActionContextCleanUp&#xff0c;它主要清理当前线程的ActionContext和Dispatcher&#xff1b;FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。 ActionMapper取得了ActionMappi…