在Java中使用MD5摘要还是很方便的,直接上代码。

1 packagecom.cxc.nothing;2

3 importjava.nio.charset.Charset;4 importjava.security.MessageDigest;5

6 public classMD5Test {7 public static voidmain(String[] args) {8

9 String text = "MD5Test";10 try{11 MessageDigest messageDigest = MessageDigest.getInstance("MD5");12 byte[] md5Bytes = messageDigest.digest(text.getBytes(Charset.forName("UTF-8")));13 for (byteb : md5Bytes) {14 System.out.println(b);15 }16 } catch(Exception e) {17 e.printStackTrace();18 }19

20 }21

22 }

以上代码就可以实现MD5摘要了。由于摘要的结果是字节数组,并不是我们常见的字符串,所以还有工作要做。

字节数组转字符串,还不简单,直接String str = new String(md5Bytes);结果,打印出来之后,才发现我太天真了。

然后各种百度之后,我终于知道了,原来这里的字节数组不能直接转字符串,而通常的做法是转成十六进制的数字。

MD5摘要的结果是一个128bit的大整数,

因为8bit表示一字节,所以当用字节表示的时候就会是128/8=16个字节。

因为4bit表示一个十六进制,所以当用十六进制表示的时候就会是128/4=32个十六进制数字。

如果你打印上面代码的md5Bytes,你就会看到如下的一个字节数组:

[-83, -42, -124, -31, -122, 59, 93, -112, 5, -125, 35, 104, 37, -92, 49, -62]

这里一共16个字节,而每个字节都需要拆分成两个十六进制数字。

我们先拿59来拆,这里的59是十进制的,把她写成8位的二进制0011 1011,再4位为一组转成十六进制就是3 B,所以这里的59,最后转化完就是3B。

接下来看看5,把她转成8位的二进制0000 0101,再4位为一组转成十六进制就是0 5,所以这里的5,最后转化完就是05,注意是“05”,而不是“5”。

正整数的拆分都同上,接下来就是负整数的拆分了。

接下来我们拆分-83,因为-83是负整数,所以实际存的是他的补码。求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1。

先写出83的二进制表示01010011,然后取反就是10101100,再加1就是10101101,所以-83实际存储的二进制应该是1010 1101,同样4位为一组转成十六进制就是A D。

下面附上转化

-83-->1010 1101-->A D-42-->1101 0110-->D 6

-124-->1000 0100-->8 4

-31-->1110 0001-->E 1

-122-->1000 0110-->8 6

59-->0011 1011-->3B93-->0101 1101-->5D-112-->1001 0000-->9 0

5-->0000 0101-->0 5

-125-->1000 0011-->8 3

35-->0010 0011-->2 3

104-->0110 1000-->6 8

37-->0010 0101-->2 5

-92-->1010 0100-->A 4

49-->0011 0001-->3 1

-62-->1100 0010-->C 2

change

所以MD5摘要实际上生成的128bit是(请无视空格):1010 1101 1101 0110 1000 0100 1110 0001 1000 0110 0011 1011 0101 1101 1001 0000 0000 0101 1000 0011 0010 0011 0110 1000 0010 0101 1010 0100 0011 0001 1100 0010

最终转化成32位的十六进制表示就是ADD684E1863B5D900583236825A431C2

以上写的是转化的思路,具体的实现,网上有很多代码,这里就不贴出来了。

在完成这篇文章之前,我参考了如下资料,在此表示感谢:

http://www.cnblogs.com/renchunxiao/p/3411370.html

http://blog.csdn.net/hll174/article/details/51063689

http://blog.csdn.net/jiaomenglei/article/details/52728796

https://wenku.baidu.com/view/3145fb45ad51f01dc281f1c5.html

https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613?fr=aladdin

Java md5加解密汉字_Java加解密_MD5相关推荐

  1. java 加密解密 工具包_java加密解密工具类

    packagecom.founder.mrp.util;importjava.nio.charset.StandardCharsets;importjava.security.Key;importja ...

  2. java加密解密代码_java加解密文件公用方法整合(多看一本书,少写三行代码)

    最近接到任务(文件的安全性)需要在文件上传到服务器上时将文件加密保存, 用户下载时将文件解密后返回给用户.翻了下方法最后决定用java中的Cipher类来完成(里面的实现方式挺全的). 上手实现.po ...

  3. java sha加解密算法_java加解密

    SHA256 ------------------java自带实现方式--------------- package com.xiayu.demo; import java.io.Unsupporte ...

  4. java加水印 盖章_java加水印

    给图片加水印的主要步骤包括: 1.获取原图的画笔 2.设置水印信息.水印位置 3.在原图上画出水印 工具代码 /** * 在图片右下角添加白色文字水印 * @param is * @param os ...

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

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

  6. java 根据拼音查询汉字_java根据拼音搜索,但数据库为汉字的解决方案

    [Java] 纯文本查看 复制代码**1.以下代码是一个文字转拼音的工具类** import org.springframework.stereotype.Component; import net. ...

  7. JAVA正则表达式怎么表达汉字_Java的正则表达式匹配汉字

    [Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API.] 刚才有同事问,顺便发出来记一下. 以前读<精通正则表达式>的时 ...

  8. java 随机生成简体汉字_Java代码实现随机生成汉字的方法|chu

    一.背景知识 GB 2312-80 是中国国家标准简体中文字符集,全称<信息交换用汉字编码字符集・基本集>,由中国国家标准总局发布,1981年5月1日实施.GB2312 编码通行于中国大陆 ...

  9. java 随机生成常用汉字_Java随机生成中文汉字

    /** * 原理是从汉字区位码找到汉字.在汉字区位码中分高位与底位, 且其中简体又有繁体. * 位数越前生成的汉字繁体的机率越大. * 所以在本例中高位从171取,底位从161取, 去掉大部分的繁体和 ...

最新文章

  1. LeetCode 1114. Print in Order--Java解法--并发问题
  2. php测试网络通不通函数,PHP检查库或函数是否可用的方法
  3. 服务器端大文件如何传给客户端,客户端往服务器传文件
  4. 9月第1周国内搜索类网站频道:百度覆盖数创新高
  5. Java 设计模式 Day3 之面向抽象原则:什么是面向抽象编程?面向抽象编程如何应用?
  6. 素数对(信息学奥赛一本通-T1403)
  7. 东山再起?这将是锤子新手机?或搭配全键盘...
  8. token怎么获取 php,如何用php获取某个页面中的input的csrf_token?
  9. Microsoft Office Communications Server 2007排错日志
  10. Python仿微信红包算法
  11. 软件开发过程中的一些感悟
  12. 如何拯救k8s镜像分发的阿喀琉斯之踵
  13. IM 即时通讯系统【源码好优多】
  14. 【tensorflow 读取图片方式】本地文件名读取以及url方式读取
  15. 征友记之---前端开发Partner
  16. Excel制作随机点名小程序
  17. U盘---群联方案量产
  18. 《圈子圈套3》终局篇没有结局的结局
  19. 新型冠状病毒同程查询
  20. PTA 7-38 等边三角形面积

热门文章

  1. jmeter创建快捷方式到桌面
  2. 安卓禁用硬件加速_开/关大不同 Android4.0 GPU硬件加速实测
  3. python如何微信公众号刷票_问卷星刷票
  4. fixture ‘xxx‘ not found
  5. 计算机基础知识 综述题,计算机应用的基础知识:文本表示综述及其改进
  6. Javascript基础知识 1(JS)
  7. 【目标检测】YOLO系列——YOLOv1详解
  8. mysql分片做主从_使用mycat部署mysql集群(分片,读写分离,主从复制)
  9. Linux系统高树攀登之路
  10. 决定个人成败的关键---自我管理能力