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

时间:2013-07-22 12:48:58

标签: java path base64

我需要使用SHA-256-'encrypted'字符串作为文件系统中路径的一部分(ext3,fat,ntfs,...)。

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

是否有一种(简单)方法来获取SHA-256 -'crycrypted'字符串的文件系统安全名称?我不喜欢将String.replaceAll()用于所有可能的无效字符。

提前感谢您提供任何帮助

2 个答案:

答案 0 :(得分:1)

尝试类似

的内容

https://gist.github.com/avilches/750151

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();
}

答案 1 :(得分:1)

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

你应该真的使用UUID。它不能长于SHA哈希。如果是这样,你有恕我直言,做错了。