2013-02-15 3 views
-3

Я нашел этот код здесь How to SHA1 hash a string in Android? зашифровать строку с помощью SHA1, который работает прекрасно,SHA1 расшифровка строки в Java

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

public class SHA1Encryption { 

    public static String SHA1(String text) throws NoSuchAlgorithmException, 
      UnsupportedEncodingException { 
     MessageDigest md = MessageDigest.getInstance("SHA-1"); 
     md.update(text.getBytes("iso-8859-1"), 0, text.length()); 
     byte[] sha1hash = md.digest(); 
     return convertToHex(sha1hash); 
    } 

    private static String convertToHex(byte[] data) { 
     StringBuilder buf = new StringBuilder(); 
     for (byte b : data) { 
      int halfbyte = (b >>> 4) & 0x0F; 
      int two_halfs = 0; 
      do { 
       buf.append((0 <= halfbyte) && (halfbyte <= 9) ? (char) ('0' + halfbyte) 
         : (char) ('a' + (halfbyte - 10))); 
       halfbyte = b & 0x0F; 
      } while (two_halfs++ < 1); 
     } 
     return buf.toString(); 
    } 

} 

, но мне нужно, чтобы расшифровать его обратно в исходную строку.

Может ли кто-нибудь помочь мне?

+0

Угадайте ввод. Это единственный способ. (Кстати, если это пароль, то вы не должны использовать SHA-1, а скорее bcrypt, scrypt или PBKDF2) – CodesInChaos

ответ

2

Вы не можете этого сделать. SHA1 - алгоритм одностороннего хэширования. Вы не можете вернуть исходное содержимое.

Если вы хотите двухстороннюю схему шифрования, попробуйте использовать AES (или RSA, но это может быть излишним).

0

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

3

То, что вы в основном задаете, следующее: «заданное значение y, найти x, такое, что h (x) = y». Это называется поиском предварительного изображения. Вся точка односторонних хеширующих функций (из которых SHA1 является одним из примеров) заключается в том, что это невозможно в любом случае быстрее, чем грубая сила (что будет принимать среднее значение O (2^159) действий).

Для дальнейшего чтения: http://en.wikipedia.org/wiki/Cryptographic_hash_function http://en.wikipedia.org/wiki/One-way_compression_function

0

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

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

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

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