java 实现 简单hash计算

2022-07-28 11:55:45

简单研究一下,今天练习了一个关于使用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国米相关算法包

  • 作者:weishunuan
  • 原文链接:https://blog.csdn.net/shunuanwei/article/details/108828284
    更新时间:2022-07-28 11:55:45