【问题标题】:Creating a Base64 encoded SHA-256 hash in Java [closed]在 Java 中创建 Base64 编码的 SHA-256 哈希 [关闭]
【发布时间】:2017-07-18 02:57:04
【问题描述】:

我们需要读取文件内容并将其转换为SHA256,然后再转换为Base64。

任何指针或示例代码都足够了,因为我是这个加密机制的新手。

提前致谢。

【问题讨论】:

标签: java oracle11g


【解决方案1】:

您可以使用MessageDigest 转换为SHA256,并使用Base64 将其转换为Base64:

public static String encode(final String clearText) throws NoSuchAlgorithmException {
    return new String(
            Base64.getEncoder().encode(MessageDigest.getInstance("SHA-256").digest(clearText.getBytes(StandardCharsets.UTF_8))));
}

【讨论】:

  • 更好的术语是创建 Base64 编码的 SHA-256 哈希。这没有回答问题:“读取文件内容并将其转换为SHA256,然后将其转换为Base64”。
  • 您好,感谢您的回复。我正在尝试通过 Java 程序读取文件内容,不包括文件的最后一条记录。文件的内容,除了最后一条记录应加密为 Sha256,后来我将其更改为 base64(不包括回车和换行)。但是,当我比较从 Java 和在线工具 (hash.online-convert.com/sha256-generator) 返回的值时,字符长度是正确的,但值是不同的。请问Ja​​va和Oracle11g生成的哈希值和加密值有区别吗?
  • 如果需要将发布代码,因为我没有得到线索。
  • 谢谢大家..我已经解决了这个问题.. :)
【解决方案2】:

使用 Java 8:

public static String fileSha256ToBase64(File file) throws NoSuchAlgorithmException, IOException {
    byte[] data = Files.readAllBytes(file.toPath());
    MessageDigest digester = MessageDigest.getInstance("SHA-256");
    digester.update(data);
    return Base64.getEncoder().encodeToString(digester.digest());
}

顺便说一句:SHA256 不是加密,它是散列。散列不需要密钥,加密需要。加密可以反转(使用密钥),散列不能。更多关于维基百科:https://en.wikipedia.org/wiki/Hash_function

【讨论】:

    猜你喜欢
    • 2014-08-19
    • 2020-04-16
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2017-09-20
    相关资源
    最近更新 更多