简单研究一下,今天练习了一个关于使用java实现hash值的计算
直接上代码,而后再简单记录解释一下
private static String myHash(String str) {
try {
byte[] bytes = str.getBytes("utf-8");
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.reset();
byte[] digest1 = digest.digest(bytes);
if (digest1.length != 32) {
System.out.println("计算hash值失败");
return null;
}
return Hex.toHexString(digest1);
} catch (UnsupportedEncodingException u) {
System.exit(-2);
} catch (NoSuchAlgorithmException n) {
System.exit(-3);
}
return null;
}
简单记录一下:
byte[] bytes = str.getBytes(“utf-8”);
获取得到待计算字符串的字节数组
MessageDigest digest = MessageDigest.getInstance(“SHA-256”);
创建获取一个MessageDigest对象,并且指定计算的类型
MessageDigest支持的计算类型有:MD2|MD5|SHA-1|SHA-256|SHA-384|SHA-512
这个是java自带的包,不用多余引包
这个具体的详细用法,我在这就不过多解析了,大家可以在这篇文章.详细看一下,学习一下
digest.reset();
byte[] digest1 = digest.digest(bytes);
这个地方,reset可以不执行,这个是重置对象,在这执行的目的是,确保是初始化的
Hex.toHexString(digest1)
这个,地方就是将计算得到的字节数组根据十六进制的规则,转换成字符串
值的注意一点的是,hash值是32位,所以我在其中加了一层判断
20200928
补充一下,如果发现 Hex 这个包没有引用的话,可以用 下面的maven依赖
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.66</version>
</dependency>
目前最新的是1.66
java国米相关算法包