文章目录

  • MD5简单介绍
  • MD5算法具有以下特点
  • 代码1
  • MD5Util
  • MD5Helper

MD5简单介绍

MD5 加密后的位数有两种:16 位与 32 位。默认使用32位。 (16 位实际上是从 32 位字符串中取中间的第 9 位到第 24 位的部分)为提高安全性。根据业务需求,可以对md5 添加偏移量。如对原有字符拼接指定位数的字符串。

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”就会发生变化。

MD5算法具有以下特点

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

代码1

public static void main(String[] args) {String s ="202111012231046012000000111101705104827";for (int i = 0; i <50 ; i++) {System.out.println( EncodeByMD5(s).toUpperCase()+"   长度"+EncodeByMD5(s).toUpperCase().length());}
}/*** 对字符串进行32位MD5加密* @param str* @return*/
public static String EncodeByMD5(String str) {try {// 生成一个MD5加密计算摘要MessageDigest md = MessageDigest.getInstance("MD5");// 计算md5函数md.update(str.getBytes("UTF-8"));// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值String md5=new BigInteger(1, md.digest()).toString(16);//BigInteger会把0省略掉,需补全至32位return fillMD5(md5);} catch (Exception e) {throw new RuntimeException("MD5加密错误:"+e.getMessage(),e);}
}private static String fillMD5(String md5){//如果不够32位则回调自身补零,最后返回32位长度的签名return md5.length()==32?md5:fillMD5("0"+md5);
}

MD5Util

package com.kuang.jiami;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class MD5Util {//待加密的密码public static String password = "202111012231046012000000111101705104829";public static void main(String args[]) {//结果字符串String result = "";try {MessageDigest md = MessageDigest.getInstance("MD5");md.update(password.getBytes());byte b[] = md.digest();int i;StringBuffer buf = new StringBuffer("");for (int offset = 0; offset < b.length; offset++) {i = b[offset];if (i < 0)i += 256;if (i < 16)buf.append("0");buf.append(Integer.toHexString(i));}result = buf.toString();System.out.println("MD5(" + password + ",32小写) = " + result);System.out.println("MD5(" + password + ",32大写) = " + result.toUpperCase());System.out.println("++++++++++++++++++++++++各位大哥借过+++++++++++++++++++++++");System.out.println("MD5(" + password + ",16小写) = " + buf.toString().substring(8, 24));System.out.println("MD5(" + password + ",16大写) = " + buf.toString().substring(8, 24).toUpperCase());} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}
}

MD5Helper

package com.kuang.jiami;import java.security.MessageDigest;public class MD5Helper {public static String encrypt32(String encryptStr) {MessageDigest md5;try {md5 = MessageDigest.getInstance("MD5");byte[] md5Bytes = md5.digest(encryptStr.getBytes());StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16)hexValue.append("0");hexValue.append(Integer.toHexString(val));}encryptStr = hexValue.toString();} catch (Exception e) {throw new RuntimeException(e);}return encryptStr;}public static String encrypt16(String encryptStr) {return encrypt32(encryptStr).substring(8, 24);}public static void main(String[] args) {String encryptStr = "202111012231046012000000111101705104829";System.out.println(MD5Helper.encrypt32(encryptStr).toUpperCase());System.out.println(MD5Helper.encrypt16(encryptStr).toUpperCase());}
}

JAVA对字符串进行32位MD5加密相关推荐

  1. java md5 32位加密算法_java 32位md5加密类

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.security.MessageDigest; import ja ...

  2. 32位MD5加密 可用来微信加密

    /// <summary>/// 32位MD5加密/// </summary>/// <param name="input"></para ...

  3. .NET生成常用16、32位MD5加密的两种方法

    //MD5加密函数比较复杂,在.NET中我们不需要编写底层的算法. //平台已经提供两个生成MD5加密的方法: //经过改动一点就可以生成如现在DVBBS等论坛中使用的MD5密码 //⑴:使用C:\W ...

  4. 32位MD5加密java实现工具类

    import sun.security.provider.MD5;import java.io.IOException; import java.math.BigInteger; import jav ...

  5. c# php md5 32位加密,C#实现将32位MD5摘要串转换为128位二进制字符串的方法

    本文实例讲述了C#实现将32位MD5摘要串转换为128位二进制字符串的方法.分享给大家供大家参考,具体如下: 将32为MD5摘要串转换为128位二进制字符串: /// /// 将字符串转成二进制 // ...

  6. Java Android 32位16位 MD5加密

    // md5加密 32位小写 private String Md5(String sourceStr) { String result = ""; try { MessageDig ...

  7. Bootstrap4+MySQL前后端综合实训-Day06-PM【MD5加码-生成32位md5码、ResultData.java、分页查询用户数据、添加用户按钮的实现】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目录 MD5加码 生成32位md5码 ResultData.java 分页查询 ...

  8. 关于40位MD5加密的破解

    一般网站后台管理员密码都是经过MD5加密的,差不多都是16位和32位的, 如果第一次碰到40位的加密,还真反映不过来,其实都是一样的. 7a57a5a743894a0e4a801fc343894a0e ...

  9. java截取字符串后几位_java截取字符串后几位字符的方法

    java截取字符串后几位字符的方法: java中截取字符串中最后几个字符可以使用String类的substring方法,具体用法参考下方说明: 1.substring(int beginIndex)s ...

  10. Java最简洁加密32位MD5

    因项目中使用了错误的加密方式无法与python集成,故略加修正. 使用java生成32位字符串的MD5: public static String getMD5(String str) {try {/ ...

最新文章

  1. 由于客户端检测到一个协议错误 代码0x1104
  2. 2021年,深度学习还有哪些未饱和、有潜力且处于上升期的研究方向?
  3. 程序员面试题精选100题(09)-链表中倒数第k个结点[数据结构]
  4. wxWidgets:wxCalendarCtrl类用法
  5. cisco 《连接网络》实验wan综合实验_GNS3实验环境优化与安装
  6. jq之mouseleave()
  7. vim命令模式和底线_人生苦短!老鸟带你用Vim偷懒!
  8. Python开发基础 day7 迭代器
  9. 【安全牛学习笔记】手动漏洞挖掘(二)
  10. python 多线程读写文件_Python多线程同步---文件读写控制方法
  11. swift 系统自带的约束使用
  12. android7.1 repo,RK3399 Android 7.1 删除repo后编译报错
  13. 数模电路基础知识 —— 8. PN结与三极管的工作原理
  14. win10登陆界面如何截屏
  15. Python collections.Counter()用法
  16. 亮度对比度色调饱和度最佳_数码教程丨如何仿电影胶片色调与质感?
  17. 前端学习之路, 记录前端小白成长历程, 学习总结, 工具汇总, 打造开箱即用的学习体验
  18. web服务软件 html5,配置WEB服务器(apache,nginx),支持 html5 video(ogv, webm.etc)播放...
  19. 树莓派基础实验20:火焰报警传感器实验
  20. Cadence Allegro 过孔通孔盲孔埋孔详细说明及设计举例图文教程

热门文章

  1. C语言strcmp函数使用及模拟
  2. android rtmp 播放器下载,android rtmp player 除了播放一般的视频格式 - 下载 - 搜珍网...
  3. DEA模型及matlab应用2:超效率SE-DEA模型
  4. mysql sql注入工具下载_sql注入工具下载|超级SQL注入工具SSQLInjectionv1.0 正式版 附使用说明 - 极光下载站...
  5. Arcgis(一) 制作全国行政区shp文件(精确到县级)
  6. python水果超市管理系统流程图_超市管理流程图-超市管理系统业务流程图
  7. k2p路由器搭建php,K2P新手教程之openwrt cc 基础设置
  8. ROS 机器人操作系统:版本说明
  9. Postman如何生成测试报告
  10. sap服务器安装双系统教程,Ghost安装双系统安装使用图文教程