Java Программа SHA-256 выдает неправильный хеш - PullRequest
0 голосов
/ 18 марта 2020

Я решал проблемы на Hackerrank.com, и я столкнулся с этой проблемой, связанной с функциями java SHA-256 Cryptographi c ha sh. здесь

Я написал следующий фрагмент кода в качестве решения. Но некоторые тесты не подходят для моего решения. Надеюсь узнать, что не так с моим кодом.

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 Ответ

1 голос
/ 18 марта 2020

32-байтовый га sh означает строку из 64 символов. Каждый байт содержит 2 шестнадцатеричные цифры, поэтому вам нужно 2 символа на байт:

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