Java SHA-256程序提供了错误的哈希

时间:2020-03-18 05:06:10

标签: java java-7 sha256 cryptographic-hash-function

我正在Hackerrank.com上解决挑战,我遇到了有关Java SHA-256加密哈希函数的挑战。 here

我编写了以下代码作为解决方案。但是有些测试用例无法解决我的问题。希望知道我的代码出了什么问题。

public class Solution {
    public static String toHexString(byte[] hash) 
    { 
        BigInteger number = new BigInteger(1, hash);  
        StringBuilder hexString = new StringBuilder(number.toString(16));  

        while (hexString.length() < 32)  
        {  
            hexString.insert(0, '0');  
        }  

        return hexString.toString();  
    } 

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.next();
        try 
        { 
            MessageDigest md = MessageDigest.getInstance("SHA-256"); 
            System.out.println(toHexString(md.digest(input.getBytes(StandardCharsets.UTF_8))));
        } 
        // For specifying wrong message digest algorithms  
        catch (NoSuchAlgorithmException e) {  
              throw new RuntimeException(e);
        }  

    }
}

这是一个失败的测试用例。7

1 个答案:

答案 0 :(得分:2)

32字节的哈希表示64个字符的字符串。每个字节包含2个十六进制数字,因此每个字节需要2个字符:

while (hexString.length() < 64)  
{  
    hexString.insert(0, '0');  
}