sha-512为同一个字符串返回不同的值

时间:2014-09-03 16:51:42

标签: java sha sha512 tripledes

我是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

1 个答案:

答案 0 :(得分:4)

数组也是Java中的对象,但它们不会覆盖Object的{​​{1}}方法。输出不是散列输出,而是Object's toString() method的结果。

  

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

toString()

getClass().getName() + '@' + Integer.toHexString(hashCode()) 负责getClass().getName(),然后是[B字符,其余字符是十六进制哈希码,也来自@。< / p>

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