хеш возвращает только 8 или 9 символов - PullRequest
0 голосов
/ 21 ноября 2018

Приведенная ссылка не отвечает на вопрос.В MessageDiggest написано:

toString()
Returns a string representation of this message digest object.

Мне неясно, почему это всегда будет всего 8 или 9 символов.

У меня есть следующий метод создания хешированного пароля.Он возвращает только 8 или 9 символов, и мне интересно, если есть проблема с ним:

import java.security.MessageDigest;
import java.security.SecureRandom;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;

public class Password {
   public static void main(String[] args) {

      String[] saltPassword = createPassword("password");

      System.out.println("Salt = " + saltPassword[0]);
      System.out.println("Password = " + saltPassword[1]);
   }

   private static String[] createPassword(String password) {
       String [] saltPassword = new String[2];
      try{  
         SecureRandom random = new SecureRandom();
         byte[] salt = new byte[32];
         random.nextBytes(salt);

         MessageDigest md = MessageDigest.getInstance("SHA-256");
         md.update(salt);
         md.update(password.getBytes("UTF8"));
         byte[] digest = md.digest();

         saltPassword[0] = salt.toString();
         saltPassword[1] = digest.toString();    

         System.out.println(digest);


        }catch(NoSuchAlgorithmException e1){
            System.out.println("FATAL ERROR: " + e1);
            System.exit(0);
        }catch(UnsupportedEncodingException e2){
            System.out.println("FATAL ERROR: " + e2);
            System.exit(0);
        }

      return(saltPassword);
   }

}

1 Ответ

0 голосов
/ 21 ноября 2018

Попробуй это.В вашем коде нет проблем, вы печатаете ссылку на объект.SHA-256 генерирует шестнадцатеричные данные длиной 64, равные 32 байтам.Вы можете преобразовать эти байтовые данные в другой формат, используя DatatypeConverter Class, но приведенный ниже код может помочь вашей проблеме.

 private static String[] createPassword(String password) {
    String [] saltPassword = new String[2];
    try{
        SecureRandom random = new SecureRandom();
        byte[] salt = new byte[32];
        random.nextBytes(salt);

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(salt);
        md.update(password.getBytes("UTF8"));
        byte[] digest = md.digest();

        saltPassword[0] = DatatypeConverter.printHexBinary(salt);
        saltPassword[1] = DatatypeConverter.printHexBinary(digest);

        System.out.println(DatatypeConverter.printHexBinary(digest));


    }catch(NoSuchAlgorithmException e1){
        System.out.println("FATAL ERROR: " + e1);
        System.exit(0);
    }catch(UnsupportedEncodingException e2){
        System.out.println("FATAL ERROR: " + e2);
        System.exit(0);
    }

    return(saltPassword);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...