Хеширование с использованием SHA1 - PullRequest
2 голосов
/ 05 июля 2010

Я делаю усовершенствование в нашей системе, и есть другое приложение, которое уже выполняет хеширование / шифрование, но никто не знает, какой алгоритм использовался, и у нас нет доступа к коду.Я должен сделать то же самое хеширование, используя java или javascript для нашей системы, потому что мне нужно выполнить поиск, поэтому мне нужно передать правильное хешированное / зашифрованное значение.У меня есть только образцы данных, сохраненные в базе данных другой системы, которые уже хэшированы / зашифрованы.

Образцы текстовых данных для хэширования: 4539780225622033
Мне нужно преобразовать их в это значение: gjfFIfHf1JsVMHbD7lwPaT43rsA=

Я нашел этот сайт, в который нужно ввести текст, и он сгенерирует все возможные значения хеширования, используя другой алгоритм хеширования.http://www.insidepro.com/hashes.php?lang=eng

Я нашел 4 результата по SHA-1.Я знаю, как получить РЕЗУЛЬТАТЫ 1 и 2, но я не знаю, как поступить с РЕЗУЛЬТАТАМИ 3 и 4.

SHA1 Результаты:

RESULT 1: 99a37385d70a8f383f51f70e148d9a115f1beed5 
RESULT 2: maNzhdcKjzg/UfcOFI2aEV8b7tU= 
RESULT 3: 8237c521f1dfd49b153076c3ee5c0f693e37aec0 
RESULT 4: gjfFIfHf1JsVMHbD7lwPaT43rsA=

Я надеюсь, что вы можете помочь мне с этим.

Заранее большое спасибо.

Bing

Ответы [ 4 ]

3 голосов
/ 05 июля 2010

Посмотрите на примечания, перечисленные внизу страницы:

[1] - Хеш в Base64

[2] - пароль в Unicode

Третий хэш получается путем хеширования версии пароля в Юникоде, четвертый - это кодированная в Base64 версия.

1 голос
/ 05 июля 2010

Первый - это SHA1 необработанного кодирования.Второй использует кодировку UTF-16 (Little Endian)

Вы можете получить второй результат, выполнив это,

        MessageDigest md = MessageDigest.getInstance("SHA1");
        md.update(text.getBytes("utf-16le"));
        byte digest[] = md.digest();
        // Convert to hex or Base64
0 голосов
/ 05 июля 2010

Наконец-то я нашел решение своей проблемы в скачанной мной реализации javascript sha1. Как я уже сказал, я новичок в этом кодировании, поэтому я не совсем уверен, как объяснить разницу.

Вместо использования UTF-8 я использовал кодировку UTF-16le:

function str2rstr_utf16le(input) {
    var output = "";
    for(var i = 0; i < input.length; i++)
        output += String.fromCharCode( input.charCodeAt(i)        & 0xFF,
                                      (input.charCodeAt(i) >>> 8) & 0xFF);
    return output;
}

Еще раз спасибо за быстрый ответ. Мне придется больше читать / изучать эту тему.

0 голосов
/ 05 июля 2010

1) Я надеюсь, что номер кредитной карты, который вы указали, не реален.

2) Есть ли вероятность декомпиляции исходного приложения для шифрования?

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

...