java实现MD5加密

MD5加密是一种常见的加密方式,我们经常用在保存用户密码和关键信息上。那么它到底有什么,又什么好处呢,会被这么广泛的运用在应用开发中。
信息-摘要算法(Message-digest Algorithm 5,MD5)于90年代初由MIT Labortory for computer sicence和RSA data security inc的ronald l.rivest开发,经md2、md3和md4发展而来。MD5的典型应用是对一段信息(message)产生信息摘要(message-digest),防止信息被篡改,常应用于加密和解密技术、Unix系统中。
  1、什么是MD5
  MD5加密全程是Message-Digest Algoorithm 5(信息-摘要算法),它对信息进行摘要采集,再通过一定的位运算,最终获取加密后的MD5字符串。
  例如我们要加密一篇文章,那么我们会随机从每段话或者每行中获取一个字,把这些字统计出来后,再通过一定的运算获得一个固定长度的MD5加密后信息。因此,其很难被逆向破解


信息-摘要算法(Message-digest Algorithm 5,MD5)于90年代初由MIT Labortory for computer sicence和RSA data security inc的ronald l.rivest开发,经md2、md3和md4发展而来。MD5的典型应用是对一段信息(message)产生信息摘要(message-digest),防止信息被篡改,常应用于加密和解密技术、Unix系统中。

 

2、MD5有哪些特点
  MD5加密的特点主要有以下几点:
  1、针对不同长度待加密的数据、字符串等等,其都可以返回一个固定长度的MD5加密字符串。(通常32位的16进制字符串);
  2、其加密过程几乎不可逆,除非维护一个庞大的Key-Value数据库来进行碰撞破解,否则几乎无法解开。
  3、运算简便,且可实现方式多样,通过一定的处理方式也可以避免碰撞算法的破解。
  4、对于一个固定的字符串。数字等等,MD5加密后的字符串是固定的,也就是说不管MD5加密多少次,都是同样的结果。


public class MD5 {private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };public static String byteArrayToHexString(byte[] b) {StringBuffer resultSb = new StringBuffer();for (int i = 0; i < b.length; i++) {resultSb.append(byteToHexString(b[i]));}return resultSb.toString();}private static String byteToHexString(byte b) {int n = b;if (n < 0)n = 256 + n;int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}public static String MD5Encode(String origin) {String resultString = null;try {resultString = new String(origin);MessageDigest md = MessageDigest.getInstance("MD5");resultString = byteArrayToHexString(md.digest(resultString.getBytes("utf-8")));} catch (Exception ex) {ex.printStackTrace();}return resultString;}public final static String md5Digest(String res) {if(res ==null||"".equals(res)){return null;}char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };byte[] strTemp;try {strTemp = res.getBytes("gbk");} catch (UnsupportedEncodingException e1) {return null;}try {MessageDigest mdTemp = MessageDigest.getInstance("MD5");mdTemp.update(strTemp);byte[] md = mdTemp.digest();int j = md.length;char str[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 = md[i];str[k++] = hexDigits[byte0 >>> 4 & 0xf];str[k++] = hexDigits[byte0 & 0xf];}String dd = new String(str);return dd;} catch (Exception e) {return null;}}public final static byte[] md5SrcDigest(String res) {if(res == null || "".equals(res)){return null;}byte[] strTemp = res.getBytes();try {MessageDigest mdTemp = MessageDigest.getInstance("MD5");mdTemp.update(strTemp);byte[] md = mdTemp.digest();return md;} catch (Exception e) {return null;}}//验签方法public static void main(String[] args) throws Exception {String jsonStr = "";String secret = "";System.out.println(jsonStr);Map<String, Object> map = JSONObject.parseObject(jsonStr);Map<String, Object> sortMap= new TreeMap<String, Object>(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.compareTo(o2);}});sortMap.putAll(map);String sign = "";for (Map.Entry<String, Object> entry : sortMap.entrySet()) {String key = entry.getKey();if(StringUtils.isNoneBlank(key) && sortMap.get(key) != null && StringUtils.isNoneBlank(String.valueOf(sortMap.get(key)))){sign += key+"="+sortMap.get(key)+"&";}}sign += "secret="+secret;sign = MD5.MD5Encode(sign).toUpperCase();System.out.println(sign);}}

 

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

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

相关文章

THINKPHP5判断当前浏览器请求方式

作用代码是否为 GET 请求if (Request::instance()->isGet())是否为 POST 请求if (Request::instance()->isPost())是否为 PUT 请求if (Request::instance()->isPut())是否为 DELETE 请求if (Request::instance()->isDelete())是否为 Ajax 请求if (Request::instanc…

jspwiki mysql_Wiki.js初体验

利用JSPWiki搭建简易企业wiki平台。今天介绍一下基于NodeJS技术的开源项目Wiki.js&#xff0c;其界面简洁美观&#xff0c;支持多种编辑器、多种用户验证方式、多种备份存储方式&#xff0c;支持国际化、自定义主题(Theme)、流量分析等。更多正在开发中的功能&#xff0c;界面也…

java中Map有哪些实现类

Java中的map是一个很重要的集合&#xff0c;他是一个接口&#xff0c;下面继承它实现了多个实现类&#xff0c;这些类各有千秋&#xff0c;各自有个各自的优点和缺点 如下图 map的主要特点是键值对的形式&#xff0c;一一对应&#xff0c;且一个key只对应1个value。其常用的map…

h2 mysql 兼容_H2内存数据库对sql语句的支持问题 sql放到mysql数据库中能跑

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼### The error may involve com.yrs.modules.classes.stu.teacher.mapper.ClassesStuTeacherMapper.queryStudentInfoByclasses### The error occurred while executing a query### SQL: SELECT ysi.stu_id, ysi.stu_name, ysi.stu…

poj1743 Musical Theme

神题&#xff01;&#xff01; 2333&#xff0c;要求可以给区间加减同一个数&#xff0c;然后我就懵逼了&#xff0c;&#xff0c;%%题解&#xff0c;可以用差分嘛2333 所以原来的区间长度差分之后就要减一了&#xff0c; 然后现在用sa搞出height数组&#xff0c;然后对于>l…

设备的分配与调度简单方案_连铸生产调度与动态重调度的优化与研究-3,炼钢技术(3)原创...

基于生产扰动分类的二阶段遗传算法求解动态重调度问题4.1引言电炉炼钢-连铸生产对整个生产的节奏要求较高&#xff0c;各个工序各个工位间配合要比较紧密&#xff0c;但实际的生产过程中总会存在许多不可避免的扰动因素&#xff0c;必须根据实时现场的监控数据来进行动态调度以…

敏捷开发总结(1)软件研发过程

敏捷开发总结&#xff08;1&#xff09;软件研发过程 转载于:https://www.cnblogs.com/lexiaofei/p/6644326.html

mysql截取字符串中的部分内容_Mysql字符串截取及获取指定字符串中的数据

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

java for循环 嵌套for循环-标签使用

continue和break可以改变循环的执行流程&#xff0c;但在多重循环中&#xff0c;这两条语句无法直接从内层循环跳转到外层循环。在C语言中&#xff0c;可以通过goto语句实现多重循环的跳转&#xff0c;但在非循环结构中使用goto语句会使程序的结构紊乱&#xff0c;可读性变差。…

WPF 窗体边框处理

一般做wpf窗口时都不会使用默认的标题栏等&#xff0c;会把他隐藏掉 此时设置以下属性 WindowStyle、AllowsTransparency、ResizeMode 中的两个或三个都能达到目的。 有一种场景&#xff0c;针对.Net 4.0及以下版本&#xff0c;4.5 直接就支持操作 1. 隐藏边框 2.保留鼠标移动到…

数据加密辅助类(默认编码UTF-8)

public final class SecurityUtil {private SecurityUtil() {}/*** 默认算法密钥*/private static final byte[] ENCRYPT_KEY { -81, 0, 105, 7, -32, 26, -49, 88 };public static final String CHARSET "UTF-8";/*** BASE64解码* * param key* return* throws Ex…

mysql 查询时间转换_数据库查询时日期的转换

首先简单说明一下&#xff0c;laravel框架中查询并打印sql语句的办法&#xff0c;不管任何时候由于sql语句报错时&#xff0c;都可以先打印一下&#xff0c;分析一下是什么原因造成的错误①引入laravel框架DB类useIlluminate\Support\Facades\DB;②开启框架日志记录DB::connect…

浅谈Spring之@Nullable、@NonNull注解

NonNull 可以标注在方法、字段、参数之上&#xff0c;表示对应的值不可以为空 Nullable 注解可以标注在方法、字段、参数之上&#xff0c;表示对应的值可以为空

事务概念和事务四大特性和隔离级别

什么是事务 事务四大特性 原生的JDBC事务处理 事务的隔离级别

python中坐标怎么表示_如何在Python中以像素表示(有限)平面上的坐标

我假设你有十进制坐标&#xff0c;比如50.3869881&#xff0c;-4.6177269&#xff0c;南北优先。在因为你有一个相当小的地图&#xff0c;我们不需要担心地球的曲率&#xff0c;我们可以假设我们有一个线性地图&#xff0c;所以地图上点的(x&#xff0c;y)坐标将是x longitude…

2017.3.31 spring mvc教程(六)转发、重定向、ajax请求

学习的博客&#xff1a;http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本&#xff1a;4.2.0。博客的时间比较早&#xff0c;11年的&#xff0c;学习的是Spring3 MVC。不知道版本上有没有变化比较大的功能。 spring mvc教程&#xff08;六&#xff09;转发、重定向、a…

squid mysql认证_Squid 3.1.7通过mysql_auth方式认证

Squid 3.1.7通过mysql_auth方式认证(FreeBSD平台)一、下载相应软件及补丁#fetch http://people.arxnet.hu/airween/mysql_auth/mysql_auth-0.8.tar.gz#tar xvzf mysql_auth-0.8.tar.gz#cd mysql_auth-0.8#patch -p1 < ../additionalselect.patchpatching file src/confparse…

Spring事务传播属性和隔离级别

Spring事务传播属性和隔离级别 一、Spring事务传播属性&#xff08;Propagation&#xff09;&#xff1a; 1) REQUIRED&#xff08;默认属性&#xff09; 如果存在一个事务&#xff0c;则支持当前事务。如果没有事务则开启一个新的事务。 被设置成这个级别时&#xff0c;会为…

.net 解析Transfer-Encoding:chunked 秒掉网上无用方案

昨天在爬数据时&#xff0c;发现某个网站Response.Get过来的数据一直是为空。当时就很奇怪&#xff0c;认真看下了响应头。发现Transfer-Encoding:chunked这个玩意网上查了下资料一般情况HTTP的Header包含Content-Length域来指明报文体的长度。有时候服务生成HTTP回应是无法确定…