【问题标题】:SHA-256-encrypted string as directory nameSHA-256 加密字符串作为目录名称
【发布时间】:2013-07-22 12:48:57
【问题描述】:

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

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

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

提前感谢您的帮助

【问题讨论】:

  • SHA512 不是加密,而是散列。
  • 为什么不能只使用 SHA256 哈希,那里没有无效字符?
  • @HeinAndréGrønnestad 哈希只是一组位。你指的是十六进制表示吗?
  • @hexafraction 是的,我是。那将只有 0-9 和 a-f 字符。
  • 为什么不使用 UUID。它保证是唯一的,并且会比 SHA-256 短。

标签: java path base64


【解决方案1】:

我不允许写 cmets ......所以我尝试一个答案。

你真的应该使用 UUID。它不能长于 SHA-hash。如果是这样,恕我直言,您做错了什么。

【讨论】:

  • 你是对的。我犯了一些错误。目前我正在使用 UUID,因为我也需要它们用于不同的目的。
【解决方案2】:

试试类似的东西

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

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 2013-06-04
    • 2015-08-21
    • 2019-03-13
    • 2016-07-13
    • 2013-04-20
    • 1970-01-01
    相关资源
    最近更新 更多