【问题标题】:sha-512 returning different value for same stringsha-512 为相同的字符串返回不同的值
【发布时间】:2014-09-03 16:51:42
【问题描述】:

我是 Java 安全的新手,所以对你们来说可能听起来很愚蠢。我使用三重des算法进行加密解密,因为我使用哈希值作为密钥。我正在使用 sha-512 进行散列我听说两个相同的字符串散列将是相同的,但我得到相同字符串的不同输出。我贴上 sha-512 的代码。如果可能,请告诉我问题所在。

public class SHA256Algo {

    public static String createHash(String text) throws UnsupportedEncodingException, NoSuchAlgorithmException 
    {
        String encryptedText = "" ;
        MessageDigest md = MessageDigest.getInstance("SHA-512");

        md.update(text.getBytes("UTF-16")); // Change this to "UTF-16" if needed
        byte[] digest = md.digest();
        String str = digest.toString() ;
        return str ;
    }

    public static void main(String[] args) {
        try {
            System.out.println(createHash("tarun")) ;
            System.out.println(createHash("tarun")) ;
        } catch (UnsupportedEncodingException | NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

输出:
[B@32d2bb53
[B@29086036

【问题讨论】:

  • toString() on array 没有你期望的效果。
  • 可以使用第三方库吗?如果您可以使用 Guava 的 Hashing.sha512().hashString(text, Charsets.UTF_16).toString(),这将更简单,这将完全实现您想要的。

标签: java sha sha512 tripledes


【解决方案1】:

数组在 Java 中也是对象,但它们不会覆盖 ObjecttoString() 方法。输出不是哈希输出,而是Object's toString() method的结果。

[T]他的方法返回一个等于值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())

getClass().getName()负责[B,然后是@字符,其余字符为十六进制哈希码,同样来自Object

除了调用toString() 之外,您还需要以另一种方式将byte 数组转换为String。这可能涉及将字节数组转换为 Base 64 或十六进制字符。

【讨论】:

  • 感谢您抽出宝贵时间,能否给我一个特定转换的示例代码。
  • @tarunverma 看看字节和字符串 API 的方法,比如 parsevalue。看看他们的javadoc。如果您有eclipse 设置nicely,所有这一切都应该很容易。
  • 感谢所有我找到将其转换为字符串的方法我正在分享代码希望它可以帮助其他人...byte[] digest = md.digest(); StringBuffer hexString = new StringBuffer(); for (int i=0;i<digest.length;i++) { hexString.append(Integer.toHexString(0xFF & digest[i])); } return hexString.toString() ;
  • 这可能不太行,因为它会修剪前导零? String.format("%02x", digest[i] & 0xFF) 会更正确。
猜你喜欢
  • 2016-01-08
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 2016-09-25
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多