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)删除。
(0)
用户投稿
上一篇 2022年6月15日
下一篇 2022年6月15日

相关推荐

  • 《原神》末日狂花怎么拿?末日狂花成就获取方法

    原神挑战者第六辑共有8个小成就,末日狂花这个小成就需要佐做什么,可能有的玩家还不清楚原神末日狂花怎么拿,这里给大家带来了原神末日狂花成就获取方法,一起来看下文中介绍吧。希望能给大家…

    2022年9月29日
  • 具备物理层核心通信算法能力和大型SoC芯片设计能力

    创耀科技局端芯片已完成研发,正在量产验证,全球市场空间约3亿美元,公司或打破博通的全球垄断地位;WiFiAP芯片支持更高的带宽、更多的频段和用户数量,可实现通信速率更高。

    2022年6月18日
  • 孩子沉迷于手机游戏?这个方法能治住他们

    孩子过度沉迷于手机游戏的危害有多大,这几年我们在热搜和新闻里已可见一斑:河南滑县一成绩优异的11岁少女,沉迷于手机游戏,家长不想让她玩游戏发生争执后,女孩服农药自杀;南京一16岁男…

    2022年8月19日
  • 王菲:两婚两离,时隔12年牵手谢霆锋,如今两个女儿成婚姻照妖镜

    婚姻的源头是爱情,但婚姻却不等于爱情。——叶萱《纸婚》 其实没有婚姻不等于没有爱情,有婚姻不等于找到了真正的人生归宿。有幸福的爱情却不一定能有幸福的婚姻。 王菲性格直率自我,对待爱…

    2022年8月16日
  • java验证码代码_JAVA生成验证码代码

    1 /** 2 * 生成验证码3 * 改造生成验证码的方式,将图片base64形式传到前台,而不是直接传验证码到前台4 *@return 5 *@throwsIOException…

    2022年7月4日
  • 梦的房租(原创)

    今夜的梦很美, 我梦到串亲的春天, 我梦到会笑的花园, 我梦到吻花的蝴蝶, 我梦到寒夜里把我找回家的妈妈, ……。 突然梦的门铃响了, 心里一下又紧紧的。 一个声音嚷: 把梦的房租…

    2022年5月6日
  • 哈勃捕捉到奇特的银河系组合:两个奇怪叠加的螺旋星系

    美国宇航局哈勃太空望远镜拍摄的一张IC 4271(也被称为Arp 40)的新图像显示了两个奇怪的螺旋星系,距离约8亿光年。较小的星系叠加在较大的星系上,后者是一种被称为塞弗特星系(…

    2022年8月15日
  • 热搜第一!1.7亿条学生信息泄露?回应来了

    针对“疑似学习通APP用户数据泄露”一事,学习通官方微博21日发布声明回应称,到目前为止还未发现明确的用户信息泄露证据。已经向公安机关报案,公安机关已经介入调查。 热搜截图 声明称…

    2022年6月23日
  • 95 后ALi P7 晒出工资单:狠补了这些个技术栈,真的香啊

    前言: 前段时间 , 在脉脉上看见某 95 后阿里 P7 晒出工资单,是真的给我酸了…… 没办法回去想想 , 还是说狠补一下技术吧。 按照之前的经验来看 , Java 一面基本上都…

    2022年6月20日
  • 手机号“一键解绑”新功能来了!再也不用担心手机号绑定太多APP

    手机号绑定太多APP,如何一键解绑?方法来了!估计很多人都不知道自己的手机号到底绑定了多少个APP,甚至很多APP已经很久不用,早就被卸载了,如果我们因为某种原因需要换手机号的时候…

    2022年6月18日

联系我们

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