java使用md5_Java_MD5的使用「建议收藏」

java使用md5_Java_MD5的使用「建议收藏」在Java中使用MD5摘要还是很方便的,直接上代码。1packagecom.cxc.nothing;23importjava.nio.charset.Charset;4importjava.security.MessageDigest;56publicclassMD5Test{7publicstaticvoidmain(String[]args){89…

大家好,又见面了,我是你们的朋友全栈君。

在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。

下面附上转化

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

-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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156802.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Windows 10版本business_editions和consumer_editions的区别?「建议收藏」

    Windows 10版本business_editions和consumer_editions的区别?「建议收藏」Windows10版本business_editions和consumer_editions的区别?【答1】二者都内置专业版,不同之处在于:consumer_editions版本包含:Home(家庭版);Education(教育版);Professional(专业版);business_editions版本包含:Education(教育版);Enterprise(企业版);Pro…

    2025年7月9日
    4
  • 华为面试笔试题库_c++笔试题

    华为面试笔试题库_c++笔试题整理了一下华为往届笔试面试题,希望对大家有帮助:超级有用的面试题:Java常见面试题   常见算法面试题  数据库常见面试题 操作系统常见面试题  C/C++常见面试题 大数据常见面试  python常见面试来源:华为笔试面试圈>>1、2018华为校招机试题目2、2018华为届校园招聘软件开发岗笔试题3、2017华为笔试题及答案4、2017年华为笔试…

    2022年8月27日
    8
  • MATLAB R2019b超详细安装教程(附完整安装文件)

    MATLAB R2019b超详细安装教程(附完整安装文件)摘要:本文详细介绍MATLABR2019b的安装步骤,为方便安装这里提供了完整安装文件的百度网盘下载链接供大家使用。从文件下载到证书安装本文都给出了每个步骤的截图,按照图示进行即可轻松完成安装使用。本文目录包括:下载安装包、正式安装步骤、复制替换文件、创建快捷方式。

    2022年6月11日
    231
  • 关于File类概念及方法的一些介绍

    关于File类概念及方法的一些介绍java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。Java把电脑中的文件和文件夹(目录)封装为一个File类,我们可以使用File类对文件和文件夹进行操作。File类的方法可以实现:1.创建一个文件/文件夹2.删除文件/文件夹3.获取文件/文件夹4.判断文件/文件夹是否存在5.对文件夹进行遍历6.获取文件的大小File类是一个与系统无关的类,任何操作系统都可以使用这个类中的方法重点:File:文件;Directory:文件夹/目录

    2022年6月7日
    40
  • 关于异步FIFO设计,这7点你必须要搞清楚「建议收藏」

    关于异步FIFO设计,这7点你必须要搞清楚「建议收藏」这篇文章可能帮助您:了解异步FIFO设计中的7个要点。

    2022年8月13日
    15
  • idea 2021.12激活-激活码分享

    (idea 2021.12激活)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月30日
    102

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号