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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 梯度散度旋度哈密顿量公式「建议收藏」

    梯度散度旋度哈密顿量公式「建议收藏」梯度散度旋度哈密顿量公式

    2022年4月24日
    104
  • 自适应音频功率放大器「建议收藏」

    自适应音频功率放大器「建议收藏」自适应音频功率放大器一、题目描述基本指标:输入信号范围10-100mV有效值,负载电阻8Ω,输出功率恒定2W其他要求:测取功放指标,测取输入、输出电阻,测取通频带曲线,验证带宽。二、设计思路拟采用自动增益控制(AGC)电路+功率放大电路实现该课题要求。2.1AGC电路设计思路采用结形场效应管(JFET)或程控放大芯片设计。①利用JFET2N3821工作在可变电阻区,通过改变场效应管源漏极间的电阻来控制运算放大器的放大倍数。②采用AD603程控增益可调集成运放作为可变增益放大器结合简单

    2022年5月3日
    52
  • Codeforces Round #256 (Div. 2) D. Multiplication Table

    Codeforces Round #256 (Div. 2) D. Multiplication Table

    2022年1月9日
    35
  • 最近开始研究武侠世界FLASH[通俗易懂]

    搞不懂swf文件应该是flash吧,但是用flashplayer10还打不开. 架站是成功了,登录界面却都没看明白.那个main.swf估计是登录界面,但是在哪调用的呢. 再研究一下吧.  

    2022年4月7日
    35
  • Matlab GUI上位机界面实现串口通信

    Matlab GUI上位机界面实现串口通信MatlabGUI因项目需求,不得不学的又杂又浅,趁着还没彻底忘记,写下来一些关键注意点。命令行窗口输入guide→BlankGUI→确定根据自己的需求,拖动选择对应的工具,如下图所示双击每一个对象,就可以弹出其检查器,修改其属性,字体大小、粗细、位置等,其中最关键的是两个,一是String,二是Tag,String是用来修改对象中的文字,Tag是所调用的代码名,这个要好的…

    2022年5月15日
    47
  • 面试必会系列 – 1.8 Spring IOC / AOP原理

    面试必会系列 – 1.8 Spring IOC / AOP原理Spring原理概览IOCAOPIOCSpringIOC常用注解使用注解的方式将bean注册到IOC容器中这四个注解写在类上面的时候,都可以完成注册bean的功能,但是这些规定并不是spring识别的依据在spring运行过程中,不会对这4个注解做任何区分,看起来都是一样的,都会完成bean的注册功能在实际开发中,最好能分清楚,提高代码的可读性@Component组件,理论上可以在任何位置添加,在扫描的时候都会完成bean的注册。最偷懒的方式,就是给所有需要注

    2022年6月15日
    27

发表回复

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

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