MD5算法原理实现以及常用方法汇总

MD5算法原理实现以及常用方法汇总

原文链接:https://juejin.cn/post/7108546254543519781

MD5加密简介

哈希算法又称散列算法,是将任何数据转换成固定长度的算法的统称。 从本质上讲,MD5也是一种哈希算法,其输出是生成128位的输出结果。 如果输入两个不同的明文,就会输出两个不同的输出值,并且根据输出值,不能得到原始的明文,这个过程是不可逆的。

MD5加密原理

MD5算法对512位报文的输入信息进行处理,每个报文被分成16个32位报文。 经过一系列处理后,算法的输出由4个32位的数据包组成,这些数据包能联生成一个128位的哈希值。

在MD5算法中,信息的填写方式是这样的:消息后面跟着一个1,然后是无数个0,直到512字节的剩余数等于448 (n*512) + 448。 为什么剩下的是448,因为剩下的512-448是64位,表示填充前的消息长度。 加上剩下的64位,(n+1)乘以512,也就是512的整数倍。

然后循环通过link变量获得结果。 MD5包含四个32位整数参数,称为链接变量:A=0x01234567, B= 0x89ABCdef, C= 0xFeDCba98, D=0x76543210。 一旦设置好四个链接变量,算法就开始了四轮循环。 具体的内部计算是关于数学的。如果你感兴趣,你可以自己理解。这里没有更多的解释。

MD5加密常用方法

/** * 用MD5算法进行加密 * @param str 需要加密的字符串 * @return MD5加密后的结果 * @throws UnsupportedEncodingException */ public static String encodeMD5String(String str) { return getMD5(str); }复制代码 /** * MD5编码方法, 该方法存在漏洞,特殊情况下编码后的字符串只有31位长度 * @param str * @param method * @return * @throws UnsupportedEncodingException */private static String encode(String str, String method) throws UnsupportedEncodingException { MessageDigest md = null; String dstr = null; try { md = MessageDigest.getInstance(method); md.update(str.getBytes(“UTF-8”)); dstr = new BigInteger(1, md.digest()).toString(16); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return dstr; }复制代码/** * MD5编码方法 * @param message * @return */ public static String getMD5(String message) { MessageDigest messageDigest = null; StringBuffer md5StrBuff = new StringBuffer(); try { messageDigest = MessageDigest.getInstance(“MD5”); messageDigest.reset(); messageDigest.update(message.getBytes(“UTF-8”)); byte[] byteArray = messageDigest.digest(); for (int i = 0; i < byteArray.length; i++) { if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i])); else md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i])); } } catch (Exception e) { throw new RuntimeException(); } return md5StrBuff.toString().toUpperCase();//字母大写 } 复制代码 /** * 加密 * @param content * @return */ public static String encrypt(String content) { String password = "12345678dd"; byte[] encryptResult = encrypt(content, password); String encryptResultStr = parseByte2HexStr(encryptResult); return encryptResultStr; }复制代码/** * 加密 * @param content * @param password * @return */ public static String encryptStr(String content, String password) { byte[] encryptResult = encrypt(content, password); return parseByte2HexStr(encryptResult); }复制代码/** * 解密 * @param encryptResultStr * @return * @throws UnsupportedEncodingException */ public static String decrypt(String encryptResultStr) throws UnsupportedEncodingException { String password = "12345678dd"; byte[] decryptFrom = parseHexStr2Byte(encryptResultStr); byte[] decryptResult = decrypt(decryptFrom, password); // 解密内容进行解码 String result = new String(decryptResult, UTF8); return result; }复制代码/** * 解密 * @param encryptStr * @param password * @return * @throws UnsupportedEncodingException */ public static String decryptStr(String encryptStr, String password) throws UnsupportedEncodingException {byte[] decryptFrom = parseHexStr2Byte(encryptStr);byte[] decryptResult = decrypt(decryptFrom, password);// 解密内容进行解码return new String(decryptResult, UTF8); }

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年6月15日 12:58
下一篇 2022年6月15日 12:58

相关推荐

  • 分享4条发微商朋友圈的方法(微商朋友圈应该怎么发)

    对于微商朋友来说,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底该怎么发呢? 为什么同样是经营一个朋友圈,有的微商看起来逼格满满,实际效果也不错;而有的却动都不动就被屏蔽甚至拉黑…

    2022年11月27日
  • 存储过程语法(sql server存储过程语法)

    今天小编给各位分享存储过程语法的知识,其中也会对sql server存储过程语法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! oracle存储过程基本语法…

    2022年11月26日
  • 《宝可梦朱紫》梦特性怎么获得?隐藏特性获取方法推荐

    宝可梦朱紫里有很多宝可梦都是拥有梦特性会变强的宝可梦,很多玩家不知道梦特性怎么获得,下面就给大家带来宝可梦朱紫隐藏特性获取方法推荐,感兴趣的小伙伴一起来看看吧,希望能帮助到大家。 …

    2022年11月25日
  • 《宝可梦朱紫》奇鲁莉安怎么进化?奇鲁莉安进化方法分享

    宝可梦朱紫中的奇鲁莉安要怎么进化呢?很多玩家都不知道,下面就给大家带来宝可梦朱紫奇鲁莉安进化方法分享,感兴趣的小伙伴一起来看看吧,希望能帮助到大家。 奇鲁莉安进化方法分享 奇鲁莉安…

    2022年11月25日
  • 百度关键词快速排名的4大原理解析(百度怎么刷关键词)

    近期百度公告惊雷算法2.0,升级之快还是第一次吧,看来百度对于刷点击行为是零容忍了。之前尹华峰SEO技术博客介绍过一篇如何使用刷点击工具,其实市面上有很多这类SEO快速排名的软件,…

    2022年11月25日
  • 博客营销的3大优势解析(博客营销怎么做)

    不知不觉已经写了24篇文章,加上这篇是第25篇了,都是自己这几年来用过的营销方法,如果遇到有些不懂的,我会咨询我的朋友和同事帮忙,尽量让每一篇有价值,哪怕是对大家有一点点帮助也行,…

    2022年11月25日
  • 淘宝直播开通后带货链接怎么做(淘宝直播需要开通淘宝店铺吗)

    直播带货无论是对于商家来说还是主播收益都是非常可观的,所以不少平台都有直播带货功能,一些小伙伴也想加入淘宝直播,那么淘宝直播开通后带货链接怎么做?下面小编为大家带来淘宝直播开通后带…

    2022年11月24日
  • 《宝可梦朱紫》暴飞龙怎么抓?暴飞龙获得方法

    宝可梦朱紫暴飞龙位置在哪?在游戏中,很多玩家还不清楚暴飞龙具体要怎么样获得,其实获得方法很简单,暴飞龙直接是没得抓的,需要玩家从宝贝龙进化得到,下面一起来看一下宝可梦朱紫暴飞龙获得…

    2022年11月23日
  • 《宝可梦朱紫》布土拨怎么进化?布土拨进化方法介绍

    宝可梦朱紫中,不同的宝可梦有不同的进化方法,其中布土拨的进化方法是比较特殊的。很多玩家不知道宝可梦朱紫布土拨怎么进化,下面就带来宝可梦朱紫布土拨进化方法介绍,一起来看看吧,希望能帮…

    2022年11月23日
  • 《宝可梦朱紫》薄荷怎么获得?薄荷获得方法

    宝可梦朱紫中薄荷有改变宝可梦的属性或性格等效果,很多玩家想知道宝可梦朱紫薄荷怎么获得,下面就带来宝可梦朱紫薄荷获得方法,感兴趣的小伙伴一起来看看吧,希望能帮助到大家。 薄荷获得方法…

    2022年11月23日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息