2015-02-03 2 views
0

Я нашел этот кусок кода, который возвращает контрольную сумму для данной строки.Шифрование/дешифрование пароля в Java

public static String getChecksum(String md5) { 
    int counter = 0; 
    while (counter != 2) { 
     try { 
      java.security.MessageDigest md = java.security.MessageDigest 
        .getInstance("MD5"); 
      byte[] array = md.digest(md5.getBytes()); 
      StringBuffer sb = new StringBuffer(); 

      for (int i = 0; i < array.length; ++i) { 
       sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100) 
         .substring(1, 3)); 
      } 
      return sb.toString(); 
     } catch (java.security.NoSuchAlgorithmException e) { 
      continue; 
     } 
    } 
    return null; 
} 

Теперь я хотел бы сделать обратное, то есть получить контрольную сумму, вернуть исходную строку. Как это возможно?

+2

Весь смысл хэширования - сделать невозможным. Вы никогда не сможете этого сделать. В связанной заметке ваш хэш небезопасен; использовать scrypt или bcrypt или PBKDFv2. – SLaks

ответ

0

Хэш - это односторонняя криптографическая функция, она была целенаправленно и преднамеренно разработана так, что вы никогда не сможете извлекать простой текст с учетом хэша.

Вы можете играть в игры, используя словари и т. Д., Чтобы попробовать угадать, что за хэш был ... но вы не можете «расшифровать» его.

1

Вы не можете. Точка криптографической хеш-функции (или «MessageDigest») заключается в том, что она является односторонней - нет известного метода для изменения хэша, кроме грубой силы (где вы используете все возможные пароли и видите, какой из них дает вам такой же хеш).

Если вы хотите обратить вспять процесс, то вы не ищете хеш-функцию.

Смежные вопросы