Java SHA-256-加密字符串作为目录名

Java SHA-256-加密字符串作为目录名,java,path,base64,Java,Path,Base64,我需要使用SHA-256-“加密”字符串作为文件系统(ext3、fat、ntfs等)路径的一部分 我尝试使用Base64对其进行编码,但这并不适用于所有情况,因为Base64编码的字符串可能包含“/”、“\”或其他无效字符 有没有一种(简单的)方法可以获取SHA-256-“加密”字符串的文件系统安全名称?我不喜欢对所有可能的无效字符使用String.replaceAll() 提前感谢您提供的任何帮助尝试以下方法 我不允许写评论。。。所以我试着回答 您应该真正使用UUID。它不能超过一个SHA哈

我需要使用SHA-256-“加密”字符串作为文件系统(ext3、fat、ntfs等)路径的一部分

我尝试使用Base64对其进行编码,但这并不适用于所有情况,因为Base64编码的字符串可能包含“/”、“\”或其他无效字符

有没有一种(简单的)方法可以获取SHA-256-“加密”字符串的文件系统安全名称?我不喜欢对所有可能的无效字符使用String.replaceAll()

提前感谢您提供的任何帮助

尝试以下方法


我不允许写评论。。。所以我试着回答


您应该真正使用UUID。它不能超过一个SHA哈希。如果是这样的话,你就错了。

SHA512不是加密,而是散列。为什么你不能使用SHA256散列,其中没有无效字符?@HeinAndréGrønnestad散列只是一组位。你指的是十六进制表示法吗?@hexafraction是的,我指的是。只有0-9和a-f字符。为什么不使用UUID呢。它保证是唯一的,并且比SHA-256短。你说得对。我犯了一些错误。目前我正在使用UUID,因为我需要它们也有不同的用途。
import java.security.*;

public static String hash256(String data) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    md.update(data.getBytes());
    return bytesToHex(md.digest());
}

public static String bytesToHex(byte[] bytes) {
    StringBuffer result = new StringBuffer();
    for (byte byt : bytes) result.append(Integer.toString((byt & 0xff) + 0x100, 16).substring(1));
    return result.toString();
}