如何在Java中使用SHA384生成48个字符的哈希

问题描述 投票:3回答:2

我正在尝试使用SHA384在Java中生成48个字符的哈希字符串,输出应该如下所示:

PÊ&¿»»@óæS0iÛ6në0Ê`o€X·“\Kâ¢ï¼fÖ...”nE @ó^ s

我目前的实施如下:

public static String getHash(byte[] inputBytes, String algorithm) throws Exception{
    String hashValue = "";
    try {
        MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
        messageDigest.update(inputBytes);
        byte[] digestedBytes = messageDigest.digest();
        hashValue = 
        DatatypeConverter.printHexBinary(digestedBytes).toLowerCase();
    } catch(Exception e) {
        e.printStackTrace();
    }
    return hashValue;
}

public static void main(String[] args) throws Exception {
    System.out.println(getHash("The quick brown fox Jumps over the lazy dog".getBytes(), "SHA-384"));
}

输出:

下午4点,下午1点,下午0点,下午41点,下午1点,下午0点,下午0点,下午7点,参观工作,拍摄照片,拍摄照片,拍摄照片

如上所述,输出字符串是96字符串而不是48字符串,我做错了什么?

java spring-mvc hash spring-security
2个回答
1
投票

你可以尝试这样的事情:

import java.security.MessageDigest;
public class Main {
    public static String getHash(byte[] inputBytes, String algorithm) throws Exception{
        try {
            MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
            messageDigest.update(inputBytes);
            byte[] digestedBytes = messageDigest.digest();
            return new String(digestedBytes, "UTF-8");
        } catch(Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getHash("The quick brown fox Jumps over the lazy dog".getBytes(), "SHA-384"));
    }
}

这会使用UTF-8编码将您的48字节数组转换为String。但是,并非所有字节都代表可打印字符,因此您最终会得到一个字符数稍少的字符串。


0
投票
package com.journaldev.examples;

import java.util.UUID;
/**
 * Java UUID randomUUID Example
 *
 */
public class UUIDExample {

    public static void main(String[] args) {
        //initialize uuid
        UUID uuid = UUID.randomUUID();
        System.out.println(uuid);

    }

}

试试这个来生成随机id

© www.soinside.com 2019 - 2024. All rights reserved.