我需要使用SHA-256-'encrypted'字符串作为文件系统中路径的一部分(ext3,fat,ntfs,...)。
我尝试使用Base64对其进行编码,但这并不适用于所有情况,因为Base64编码的字符串可能包含'/','\'或其他无效字符。
是否有一种(简单)方法来获取SHA-256 -'crycrypted'字符串的文件系统安全名称?我不喜欢将String.replaceAll()用于所有可能的无效字符。
提前感谢您提供任何帮助
答案 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哈希。如果是这样,你有恕我直言,做错了。