Понимание хэширования SHA-256 - PullRequest
0 голосов
/ 19 апреля 2020

Я использую хеширование Sha-256 в моей Java программе, которая работает согласно поведению.

Я немного запутался в функции, которую использовал для SHA-256.

Ниже приведен код функции:

// Function for generating to Hash of the file content..
    public static String generateHash( String fileContent ) 
     {
        String hashtext = EMPTY_STRING;

        try {

            // SHA - 256 Message Digest..
            MessageDigest shaDigest = MessageDigest.getInstance( "SHA-256" );

            // digest() method is called 
            // to calculate message digest of the input string 
            // returned as array of byte 
            byte[] messageDigest = shaDigest.digest( fileContent.getBytes() ); 

            // Convert byte array into signum representation 
            BigInteger no = new BigInteger( 1, messageDigest ); 

            // Convert message digest into hex value 
            hashtext = no.toString( 16 ); 

            // Add preceding 0s to make it 32 bit 
            while ( hashtext.length() < 32 ) { 
                hashtext = "0" + hashtext; 
            }

        }
        catch ( Exception hashingException ) {

            System.out.println( "Exception in Hashing of Content = " + hashingException );

        }
         // return the HashText 
         return hashtext; 
     }

Теперь я запутался в трех утверждениях; поскольку я не знаю, какова их настоящая цель, так как я просмотрел их на inte rnet, но не получил никаких поясняющих вещей. Может ли кто-нибудь прояснить мне эти три шага?

ЗАЯВЛЕНИЕ 1

BigInteger no = new BigInteger( 1, messageDigest ); 

ЗАЯВЛЕНИЕ 2

 hashtext = no.toString( 16 );

ЗАЯВЛЕНИЕ 3

while ( hashtext.length() < 32 ) { 
    hashtext = "0" + hashtext;
}

1 Ответ

0 голосов
/ 19 апреля 2020
BigInteger no = new BigInteger( 1, messageDigest ); 

Преобразование байтов в представление с положительным знаком. Прочитайте Javado c для получения дополнительной информации.

hashtext = no.toString( 16 );

Конвертируйте число BigInteger в строку 16 (шестнадцатеричное число) в базовой строке

while ( hashtext.length() < 32 ) { 
    hashtext = "0" + hashtext;
}

Prepend 0, пока хеш-текст не будет иметь размер 32.

...