首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成长度固定的散列。

问生成长度固定的散列。
EN

Stack Overflow用户
提问于 2018-11-09 11:48:46
回答 2查看 7.2K关注 0票数 3

我想制作一个固定长度的散列字符串。为此,我正在使用MessageDigest API。我注意到了API中的这函数,但它返回的是整数,而不是字节数组。

当我尝试使用这个重载的摘要方法时,我会得到一个java.security.DigestException:长度必须至少为32的SHA-256摘要,或者输出缓冲区对于指定的偏移量和长度来说太小。

请给出一个固定长度的哈希值的例子。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-09 11:53:17

您可以使用公域编码c DigestUtils来生成散列的十六进制表示。有几种算法可用:

例如:

代码语言:javascript
复制
String input = "Hello World";
String sha1 = DigestUtils.sha1Hex(input);
System.out.println(sha1); // 0a4d55a8d778e5022fab701977c5d840bbc486d0
票数 1
EN

Stack Overflow用户

发布于 2018-11-09 12:04:55

它可以这样实现:

代码语言:javascript
复制
import javax.xml.bind.DatatypeConverter;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class TestA {

    public static void main(String [] args) throws Exception {
        String input = "Hello World";
        System.out.println(DatatypeConverter.printHexBinary(hashBytes(input.getBytes(StandardCharsets.UTF_8))));
    }

    public static byte[] hashBytes(byte [] bytes) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        md.update(bytes);
        return md.digest();
    }
}

当然,SHA-256可以代替SHA-1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53225190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档