2

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

4

1 回答 1

4

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

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

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

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

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

于 2014-09-03T16:54:18.317 回答