java计算md5值-为什么要把结果转为16进制的字符串?
来源:互联网 发布:广东工资软件改学历 编辑:程序博客网 时间:2024/06/03 23:47
为什么算出的md5值用byte表示不行,大家都要转成16进制呢?
我们先来看一个网上找到的用java计算的简单的md5程序
import java.security.*;class md5_test { private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; public static void main(String[] args) { try { String s = "lloasdfawealllac"; MessageDigest messageDigest= MessageDigest.getInstance("MD5"); System.out.println(byteArrayToHexString(messageDigest.digest(s.getBytes()))); //留意这一句话 } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } private static String byteArrayToHexString(byte[] b) { StringBuffer resultSb = new StringBuffer(); for (int i = 0; i < b.length; i++) { resultSb.append(byteToHexString(b[i])); } return resultSb.toString(); } private static String byteToHexString(byte b) { int n = b; if (n < 0) n = 256 + n; int d1 = n / 16; int d2 = n % 16; return hexDigits[d1] + hexDigits[d2]; } }
输出结果的时候还需要函数将messageDigest.digest()返回的byte[]进行转化,若不进行转化,将会输出什么呢
[B@1363fb3
我试了很多不同输入,结果都是这样,求教可怜
回到题目,之所以要转化为16进制,是因为byte[]中,每个元素都占8个二进制位,每个位都有两种可能,于是16进制中每两位对应byte中的一位。比如byte中第3位的值为1,那么这一位的值就会转成16进制中的5了
上面程序执行这个对应的是
return hexDigits[d1] + hexDigits[d2];
其实直接用byte类型的数也可以唯一标识一个md5值,但是你会发现有负数。。。其实表示的类型不是非要16进制的,但是这是主流做法,相信有些地方16进制是方便的选择
0 0
- java计算md5值-为什么要把结果转为16进制的字符串?
- md5 C++源代码 Writen by Robert Hubley,我只是加入了把加密结果转为10进制和16进制的几行代码
- 计算md5的C++代码(与java结果相同)
- java把特殊符号分割的字符串转为数组
- 为什么Java要把字符串设计成不可变的
- 为什么Java要把字符串设计成不可变的
- 为什么 Java 要把字符串设计成不可变的
- 为什么要把Java字符串设计为不可变的
- 为什么 Java 要把字符串设计成不可变的
- 为什么Java要把字符串设计成不可变的
- 为什么Java要把字符串设计成不可变的
- 把带横杠的字符串转为驼峰字符串
- shell中计算字符串的md5值
- shell中计算字符串的md5值
- 计算字符串和文件的MD5值
- 计算字符串的MD5值和MD5文件摘要
- 实现一个函数,计算一个字符串的值,该字符串中只有+ - * /四种运算符, 没有括号。 //参数mathString:要计算的字符串; //返回值:把计算出来的结果返回 例如:传入:@"1+2-1
- 把整型数据转为最低2进制最高36进制的字符串
- 闲来无事做了个苹果手机价值与小米手机价值比较
- Redis与Memcached的区别
- NSBundle介绍
- 将一个项目导入eclipse后中文注释出现乱码
- pip常用命令
- java计算md5值-为什么要把结果转为16进制的字符串?
- 归并算法
- codeforces 630 K. Indivisibility
- 使用pycharm搭建python开发环境及连接greenplum和mysql
- 会话_Session
- 1083. List Grades (25)
- tcp校验和的实现原理
- 实现easyui的datagrid导出为excel
- 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质