【问题标题】:Hashing with Google Guava in Java outputting with lowercase characters while online hashing site outputs in uppercase在 Java 中使用 Google Guava 散列输出小写字符,而在线散列站点输出大写
【发布时间】:2018-12-01 02:44:25
【问题描述】:

我正在使用 google 的 Hashing 在 Java 中对密码进行哈希处理。

password = Hashing
        .sha256()
        .hashString(input, StandardCharsets.UTF_8)
        .toString();

当我将任何文本传递到该行时,它会散列并输出带有小写字符的所有内容,例如,如果我传递“foo”,password 的值将变为:

2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae

但是,如果我使用这个site 来散列“foo”,它输出的值是

2C26B46B68FFC68FF99B453C1D30413413422D706483BFA0F98A5E886266E7AE

据我所知,这只是完全相同的密码,只是用大写字母而不是小写字母。

是什么导致它们输出不同的值,我怎样才能让番石榴输出大写字母(不只是调用 toUpperCase,除非那真的是唯一的方法)

【问题讨论】:

  • 它们是十六进制数字,大小写在语义上并不重要。
  • 它只是二进制数据的十六进制编码。十六进制编码不指定大写/小写,因为它与十六进制编码无关。如果您比较十六进制编码的字符串,you 需要进行不区分大小写的比较,或者 you 需要对大写或小写进行标准化。
  • 酷,谢谢。解释确实是我所要求的。我已经知道我可以调用 toUpperCase

标签: java hash guava sha256


【解决方案1】:

Guava 将结果字符串设为小写的主要原因是:com.google.common.hash.HashCode.toString()method 的实现。

您可以简单地从 String 类中调用 toUpperCase() 方法,对您的结果哈希字符串值:

password = Hashing
        .sha256()
        .hashString(input, StandardCharsets.UTF_8)
        .toString()
        .toUpperCase();

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 2020-12-19
    • 2016-05-06
    • 2013-03-15
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    相关资源
    最近更新 更多