Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей
Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей Автор: Kody Хэши обычно используются для хранения конфиденциальной информации, как, например, учетных записей, которые не должны находиться в открытом виде. При помощи утилит наподобие Hashcat мы можем взломать эти хэши однако только в случае, если знаем алгоритм генерации. Используя инструменты навроде скрипта hash-identifier, можно легко определить тип любых хэшей, чтобы затем указать правильный режим при работе с Hashcat. Помимо взлома хэшей hash-identifier также полезен для идентификации алгоритма, используемого при выдаче контрольной суммы для загрузки файлов. Кроме того, этот скрипт помогает определить, к какому приложению относится хэшированный файл или значение (например, SQL базе или какому-либо другому формату, специфичному для конкретного поставщика). Что такое хэш и как расшифровать пароль? Как было сказано ранее, пароли, извлекаемые из базы данных или компьютера, обычно хранятся в виде хэшей, а не в открытом виде. Функция хэширования преобразует пароли в хаотичный набор символов и чисел, которые не должны быть обратимы обратно в пароль. Однако два или более одинаковых пароля, при использовании одной и той же функции, будут иметь один и тот же хэш. Соответственно, при помощи этой функции можно получить набор хэшей для списка паролей, а затем использовать этот перечень для обнаружения подходящего пароля. Подобным образом работает множество утилит для взлома. Хотя хранение пароля в виде хэша лучше, чем в открытом виде, вероятность взлома все равно остается, если у злоумышленника хороший набор правил или словарь, которые можно использовать в Hashcat или другой подобной программе. https://www.youtube.com/watch?v=aC7Pjjr6NcM&feature=emb_title Если вы много работаете с хэшами, то легко увидите разницу между разными и часто используемыми типами. Например, сможете ли вы на глаз определить, к какому типу относятся хэши, указанные ниже?
8743b52063cd84097a65d1633f5c74f5 b89eaac7e61417341b710b727768294d0e6a277b
Хотя вы могли видеть и тот и другой хэш ранее, ответ на вопрос, какой хэш — MD5, а какой — SHA1, не столь очевиден. Еще большая путаница может возникнуть со схожими типами хэшей, относящиеся к разным режимам в Hashcat. В случае с хэшами, приведенными выше, этот факт имеет чрезвычайно важное значение. При использовании Hashcat для взлома этого хэша мы должны установить опцию –m с целью работы в нужном режиме. Для взлома хэша MD5 мы бы указали режим 0.
~$ sudo hashcat -m 0 -a 0 8743b52063cd84097a65d1633f5c74f5 example.dict --force hashcat (v4.0.1) starting. OpenCL Platform #1: The pocl project ==================================== * Device #1: pthread-Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz, 1024/3639 MB allocatable, 2MCU 8743b52063cd84097a65d1633f5c74f5:hashcat
В итоге, установив нужный алгоритм и используя хороший словарь, после расшифровки хэша мы получили слово «hashcat». Какие хэши поддерживаются? На данный момент Hashcat в состоянии расшифровать большое количество хэшей. В репозитории на GitHub для утилиты hash-identifier список поддерживаемых хэшей очень внушителен:
ADLER-32 CRC-16 CRC-16-CCITT CRC-32 CRC-32B DES (Unix) Domain Cached Credentials FCS-16 GHash-32-3 GHash-32-5 GOST R 34.11-94 Haval-128 Haval-160 Haval-192 110080 Haval-224 114080 Haval-256 Lineage II C4 MD2 MD4 MD5 MD5 ($pass.$salt) - Joomla MD5 (APR) MD5 (Half) MD5 (HMAC(WordPress)) MD5 (Middle) MD5 (phpBB3) MD5 (Unix) MD5 (WordPress) MySQL MySQL 160bit - SHA-1(SHA-1($pass)) MySQL5 - SHA-1(SHA-1($pass)) NTLM RAdmin v2.x RipeMD-128 RipeMD-160 RipeMD-256 RipeMD-320 SAM - (LM_hash:NT_hash) SHA-1 SHA-1 (Django) SHA-1 (MaNGOS) SHA-224 SHA-256 SHA-256 (Django) SHA-384 SHA-384 (Django) SHA-512 SNEFRU-128 SNEFRU-256 Tiger-128 Tiger-160 Tiger-192 XOR-32 Whirlpool
и другие… Что понадобится Для начала нужно установить Python3 на вашем компьютере (есть версии для разных платформ). Кроме того, вам понадобится утилита Hashcat, которую можно загрузить, используя команду apt install hashcat, после обновления системы при помощи команд apt update и apt upgrade. Если вы хотите сгенерировать ваши собственные хэши для тестового взлома, то можете воспользоваться командой в формате echo —n PLAINTEXT | (HASHTYPE)sum. Например, при создании хэша SHA1 для слова «nullbyte» я запустил следующую команду:
~$ echo -n nullbyte | sha1sum 32c0ced56f1fe08583bdb079d85a35a81995018c -
Шаг 1. Загрузка и установка Hash-Identifier Установить скрипт, написанный на Python, – очень просто. Откройте терминал и запустите следующую команду:
~$ git clone https://github.com/blackploit/hash-identifier.git Cloning into 'hash-identifier'. remote: Enumerating objects: 21, done. remote: Total 21 (delta 0), reused 0 (delta 0), pack-reused 21 Unpacking objects: 100% (21/21), done.
Затем посмотрите содержимое директории hash-identifier:
~$ cd hash-identifier ~/hash-identifier$ ls hash-id.py README.md screenshots
Вы должны обнаружить файл hash—id.py, который можно запустить при помощи команды ниже:
~/hash-identifier$ python3 hash-id.py ######################################################################### # __ __ __ ______ _____ # # /\ \/\ \ /\ \ /\__ _\ /\ _ `\ # # \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ # # \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ # # \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ # # \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ # # \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 # # By Zion3R # # www.Blackploit.com # # Root@Blackploit.com # ######################################################################### -------------------------------------------------- HASH:
Шаг 2. Идентификация неизвестных хэшей В качестве пробного подхода при помощи hash-identifier попробуем опознать следующие пять неизвестных хэшей:
Hash 1: 7196759210defdc0 Hash 2: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d (256) Hash 3: 32c0ced56f1fe08583bdb079d85a35a81995018c (1) Hash 4: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 (512) Hash 5: 5f804b61f8dcf70044ad8c1385e946a8 (md5)
Для начала в командной строке вводим первую строку и быстро получаем результат, что скорее всего имеем дело с хэшем, используемым в MySQL, который попробуем взломать чуть позже.
HASH: 7196759210defdc0 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)
Второй хэш, показанный ниже, опознается как SHA256. Другой вероятный вариант — Haval256.
HASH: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d Possible Hashs: [+] SHA-256 [+] Haval-256 Least Possible Hashs: [+] GOST R 34.11-94 [+] RipeMD-256 [+] SNEFRU-256 [+] SHA-256(HMAC) [+] Haval-256(HMAC) [+] RipeMD-256(HMAC) [+] SNEFRU-256(HMAC) [+] SHA-256(md5($pass)) [+] SHA-256(sha1($pass))
Третий хэш опознается как SHA1:
HASH: 32c0ced56f1fe08583bdb079d85a35a81995018c Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) Least Possible Hashs: [+] Tiger-160 [+] Haval-160 [+] RipeMD-160 [+] SHA-1(HMAC) [+] Tiger-160(HMAC) [+] RipeMD-160(HMAC) [+] Haval-160(HMAC) [+] SHA-1(MaNGOS) [+] SHA-1(MaNGOS2) [+] sha1($pass.$salt) [+] sha1($salt.$pass) [+] sha1($salt.md5($pass)) [+] sha1($salt.md5($pass).$salt) [+] sha1($salt.sha1($pass)) [+] sha1($salt.sha1($salt.sha1($pass))) [+] sha1($username.$pass) [+] sha1($username.$pass.$salt) [+] sha1(md5($pass)) [+] sha1(md5($pass).$salt) [+] sha1(md5(sha1($pass))) [+] sha1(sha1($pass)) [+] sha1(sha1($pass).$salt) [+] sha1(sha1($pass).substr($pass,0,3)) [+] sha1(sha1($salt.$pass)) [+] sha1(sha1(sha1($pass))) [+] sha1(strtolower($username).$pass)
Четвертый хэш опознается как SHA512:
HASH: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 Possible Hashs: [+] SHA-512 [+] Whirlpool Least Possible Hashs: [+] SHA-512(HMAC) [+] Whirlpool(HMAC)
Наконец, пятый и последний хэш опознается как MD5:
HASH: 5f804b61f8dcf70044ad8c1385e946a8 Possible Hashs: [+] MD5 [+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username))) Least Possible Hashs: [+] RAdmin v2.x [+] NTLM [+] MD4 [+] MD2 [+] MD5(HMAC) [+] MD4(HMAC) [+] MD2(HMAC) [+] MD5(HMAC(WordPress)) [+] Haval-128 [+] Haval-128(HMAC) [+] RipeMD-128 [+] RipeMD-128(HMAC) [+] SNEFRU-128 [+] SNEFRU-128(HMAC) [+] Tiger-128 [+] Tiger-128(HMAC) [+] md5($pass.$salt) [+] md5($salt.$pass) [+] md5($salt.$pass.$salt) [+] md5($salt.$pass.$username) [+] md5($salt.md5($pass)) [+] md5($salt.md5($pass)) [+] md5($salt.md5($pass.$salt)) [+] md5($salt.md5($pass.$salt)) [+] md5($salt.md5($salt.$pass)) [+] md5($salt.md5(md5($pass).$salt)) [+] md5($username.0.$pass) [+] md5($username.LF.$pass) [+] md5($username.md5($pass).$salt) [+] md5(md5($pass)) [+] md5(md5($pass).$salt) [+] md5(md5($pass).md5($salt)) [+] md5(md5($salt).$pass) [+] md5(md5($salt).md5($pass)) [+] md5(md5($username.$pass).$salt) [+] md5(md5(md5($pass))) [+] md5(md5(md5(md5($pass)))) [+] md5(md5(md5(md5(md5($pass))))) [+] md5(sha1($pass)) [+] md5(sha1(md5($pass))) [+] md5(sha1(md5(sha1($pass)))) [+] md5(strtoupper(md5($pass)))
Все прошло без особых проблем. Следующий шаг – поиск нужного режима, соответствующего обнаруженному типу, который будет указываться в Hashcat во время взлома. Шаг 3. Подбор режима в Hashcat При поиске нужного режима мы можем взглянуть на огромный список хэшей, поддерживаемых в Hashcat. Сокращенный вариант с наиболее популярными типами приведен ниже:
Hash-Mode Hash-Name Example 0 MD5 8743b52063cd84097a65d1633f5c74f5 10 md5($pass.$salt) 01dfae6e5d4d90d9892622325959afbe:7050461 20 md5($salt.$pass) f0fda58630310a6dd91a7d8f0a4ceda2:4225637426 30 md5(utf16le($pass).$salt) b31d032cfdcf47a399990a71e43c5d2a:144816 40 md5($salt.utf16le($pass)) d63d0e21fdc05f618d55ef306c54af82:13288442151473 50 HMAC-MD5 (key = $pass) fc741db0a2968c39d9c2a5cc75b05370:1234 60 HMAC-MD5 (key = $salt) bfd280436f45fa38eaacac3b00518f29:1234 100 SHA1 b89eaac7e61417341b710b727768294d0e6a277b 110 sha1($pass.$salt) 2fc5a684737ce1bf7b3b239df432416e0dd07357:2014 120 sha1($salt.$pass) cac35ec206d868b7d7cb0b55f31d9425b075082b:5363620024 130 sha1(utf16le($pass).$salt) c57f6ac1b71f45a07dbd91a59fa47c23abcd87c2:631225 140 sha1($salt.utf16le($pass)) 5db61e4cd8776c7969cfd62456da639a4c87683a:8763434884872 150 HMAC-SHA1 (key = $pass) c898896f3f70f61bc3fb19bef222aa860e5ea717:1234 160 HMAC-SHA1 (key = $salt) d89c92b4400b15c39e462a8caa939ab40c3aeeea:1234 200 MySQL323 1EAFFED54F552AA5 300 MySQL4.1/MySQL5 fcf7c1b8749cf99d88e5f34271d636178fb5d130
В списке выше есть два примера, которые могут соответствовать первому хэшу (7196759210defdc0), рассмотренному нами в предыдущем шаге. На первый взгляд, режим 200 «MySQL323» наиболее соответствует. Подтвердить гипотезу можно при помощи проверки тестового хэша в hash-identifier.
HASH: 1EAFFED54F552AA5 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)
Точное совпадение с нужным хэшем:
HASH: 7196759210defdc0 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)
Если мы попробуем другой тип (300), то увидим, что результаты не совпадают.
HASH: fcf7c1b8749cf99d88e5f34271d636178fb5d130 Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) Least Possible Hashs: [+] Tiger-160 [+] Haval-160 [+] RipeMD-160 [+] SHA-1(HMAC) [+] Tiger-160(HMAC) [+] RipeMD-160(HMAC) [+] Haval-160(HMAC) [+] SHA-1(MaNGOS) [+] SHA-1(MaNGOS2) [+] sha1($pass.$salt) [+] sha1($salt.$pass) [+] sha1($salt.md5($pass)) [+] sha1($salt.md5($pass).$salt) [+] sha1($salt.sha1($pass)) [+] sha1($salt.sha1($salt.sha1($pass))) [+] sha1($username.$pass) [+] sha1($username.$pass.$salt) [+] sha1(md5($pass)) [+] sha1(md5($pass).$salt) [+] sha1(md5(sha1($pass))) [+] sha1(sha1($pass)) [+] sha1(sha1($pass).$salt) [+] sha1(sha1($pass).substr($pass,0,3)) [+] sha1(sha1($salt.$pass)) [+] sha1(sha1(sha1($pass))) [+] sha1(strtolower($username).$pass)
Соответственно, еще раз убеждаемся, что режим 200 выбран правильно. Шаг 4. Расшифровка хэша при помощи Hashcat После идентификации типа хэша и подбора нужно режима можно приступать к расшифровке пароля в Hashcat. Вначале нужно создать словарь с паролями, который будет использоваться в Hashcat для атаки на хэш. В сети есть много доступных списков, например, RockYou, но в нашем случае мы будем создавать тестовый словарь example.dict с несколькими паролями. Если вы все еще находитесь внутри скрипта hash-identifier, нажмите Ctrl—C, а затем откройте файл в текстовом редакторе nano, запустив следующую команду:
~/hash-identifier$ nano example.dict
После добавления нескольких предполагаемых паролей, один из которых – «hashcat», нажимаем Ctrl—X для выхода из редактора и вводим Y, чтобы сохранить изменения в файле. Теперь мы можем использовать этот файл в качестве словаря вместе с ранее выбранным режимом для взлома хэша. Базовая команда выглядит примерно так:
sudo hashcat -m MODE_NUMBER -a 0 HASH_VALUE example.dict
Вместо значения HASH_VALUE указываем хэш 7196759210defdc0, вместо MODE_NUMBER – подобранный ранее режим 200. Результат работы показан ниже. Если у вас старая система, как в моем случае – нужно указать параметр –force.
~/hash-identifier$ sudo hashcat -m 200 -a 0 7196759210defdc0 example.dict --force hashcat (v5.1.0) starting. OpenCL Platform #1: The pocl project ==================================== * Device #1: pthread-Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz, 1024/3639 MB allocatable, 2MCU /usr/share/hashcat/OpenCL/m00200_a0-optimized.cl: Pure OpenCL kernel not found, falling back to optimized OpenCL kernel Hashes: 1 digests; 1 unique digests, 1 unique salts Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates Rules: 1 Applicable optimizers: * Optimized-Kernel * Zero-Byte * Not-Iterated * Single-Hash * Single-Salt Password length minimum: 0 Password length maximum: 31 Watchdog: Hardware monitoring interface not found on your system. Watchdog: Temperature abort trigger disabled. Watchdog: Temperature retain trigger disabled. * Device #1: build_opts '-I /usr/share/hashcat/OpenCL -D VENDOR_ID=64 -D CUDA_ARCH=0 -D AMD_ROCM=0 -D VECT_SIZE=4 -D DEVICE_TYPE=2 -D DGST_R0=0 -D DGST_R1=1 -D DGST_R2=2 -D DGST_R3=3 -D DGST_ELEM=4 -D KERN_TYPE=200 -D _unroll' * Device #1: Kernel m00200_a0-optimized.44d10a8c.kernel not found in cache! Building may take a while. Dictionary cache hit: * Filename. example.dict * Passwords.: 17 * Bytes. 76 * Keyspace. 17 - Device #1: autotuned kernel-accel to 1024 - Device #1: autotuned kernel-loops to 1 [s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => The wordlist or mask that you are using is too small. This means that hashcat cannot use the full parallel power of your device(s). Unless you supply more work, your cracking speed will drop. For tips on supplying more work, see: https://hashcat.net/faq/morework Approaching final keyspace - workload adjusted. 7196759210defdc0:hashcat Session. hashcat Status. Cracked Hash.Type. MySQL323 Hash.Target. 7196759210defdc0 Time.Started. Mon Dec 9 17:00:25 2019 (0 secs) Time.Estimated. Mon Dec 9 17:00:25 2019 (0 secs) Guess.Base. File (example.dict) Guess.Queue. 1/1 (100.00%) Speed.Dev.#1. 0 H/s (0.03ms) Recovered. 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress. 17/17 (100.00%) Rejected. 0/17 (0.00%) Restore.Point. 0/17 (0.00%) Candidates.#1. wow -> again HWMon.Dev.#1. N/A Started: Mon Dec 9 17:00:17 2019 Stopped: Mon Dec 9 17:00:27 2019
В результате мы получили 7196759210defdc0:hashcat и смогли расшифровать хэш посредством сравнения с элементами словаря из файла example.dict. Заключение Когда вы имеете дело с неизвестным хэшем, первый шаг – корректная идентификация типа. Хотя скрипт hash-identifier – не идеален, но позволяет без особых проблем опознать наиболее распространённые хэши и отличить разные типа хэшей, которые выглядят одинаково, но требуют разных режим работы в Hashcat. Даже если hash-identifier не уверен, с каким типом вы имеете дело, сравнение с результатами примеров с сайта Hashcat, может помочь в идентификации. Надеюсь это руководство, посвященное опознанию неизвестных хэшей, вам понравилось.
DES(Unix)
IvS7aeT4NzQPM
Применяется в Linux и др. подобных ОС.
Длина: 13 символов.
Описание: первые 2 символа – это соль (случайные символы, в нашем примере солью является строка «Iv»), а затем – непосредственно хэш.
Domain Cached Credentials
Admin:b474d48cdfc4974d86ef4d24904cdd91
Применяется для кэширования паролей домена Windows.
Длина: 16 байт.
Алгоритм: MD4(MD4(Unicode($pass)).Unicode(strtolower($userna me)))
MD5(Unix)
$1$12345678$XM4P3PrKBgKNnTaqG9P0T/
Применяется в Linux и др. подобных ОС.
Длина: 34 символа.
Описание: хэш начинается с сигнатуры $1$, затем идет соль (до 8 случайных символов, в нашем примере солью является строка «12345678″), еще один символ $, а затем – непосредственно хэш.
MD5(APR)
$apr1$12345678$auQSX8Mvzt.tdBi4y6Xgj.
Применяется в Linux и др. подобных ОС.
Длина: 37 символов.
Описание: хэш начинается с сигнатуры $apr1$, затем идет соль (до 8 случайных символов, в нашем примере солью является строка «12345678″), еще один символ $, а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 2000 вызовов алгоритма MD5.
MD5(phpBB3)
$H$9123456785DAERgALpsri.D9z3ht120
Применяется в phpBB 3.x.x.
Длина: 34 символа.
Описание: хэш начинается с сигнатуры $H$, затем идет один символ (чаще всего это символ ’9′), затем идет соль (8 случайных символов, в нашем примере солью является строка «12345678″), а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 2048 вызовов алгоритма MD5.
MD5(WordPress)
$P$B123456780BhGFYSlUqGyE6ErKErL01
Применяется в WordPress.
Длина: 34 символа.
Описание: хэш начинается с сигнатуры $P$, затем идет один символ (чаще всего это символ ‘B’), затем идет соль (8 случайных символов, в нашем примере солью является строка «12345678″), а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 8192 вызовов алгоритма MD5
MySQL
606717496665bcba
Применяется в старых версиях MySQL.
Длина: 8 байт.
Описание: хэш состоит из двух DWORD’ов, каждый из которых не превышает значения 0x7fffffff.
MySQL5
*E6CC90B878B948C35E92B003C792C46C58C4AF40
Применяется в новых версиях MySQL.
Длина: 20 байт.
Алгоритм: SHA-1(SHA-1($pass))
Примечание: в программу нужно загружать хэши без звездочки, которая стоит в начале хэшей.
RAdmin v2.x
5e32cceaafed5cc80866737dfb212d7f
Применяется в программе Remote Administrator v2.x.
Длина: 16 байт.
Алгоритм: пароль дополняется нулями до длины 100 байт и вся эта строка хэшируется алгоритмом MD5.
MD5
c4ca4238a0b923820dcc509a6f75849b
Применяется в phpBB v2.x, Joomla версии ниже 1.0.13, а также во многих других форумах и CMS.
Длина: 16 байт.
Алгоритм: соответствует функции md5() языка PHP.
md5($pass.$salt)
6f04f0d75f6870858bae14ac0b6d9f73:1234
Применяется в WB News, Joomla версии 1.0.13 и выше.
Длина: 16 байт.
md5($salt.$pass)
f190ce9ac8445d249747cab7be43f7d5:12
Применяется в osCommerce, AEF, Gallery и других CMS.
Длина: 16 байт.
md5(md5($pass))
28c8edde3d61a0411511d3b1866f0636
Применяется в e107, DLE, AVE, Diferior, Koobi и других CMS.
md5(md5($pass).$salt)
6011527690eddca23580955c216b1fd2:wQ6
Применяется в vBulletin, IceBB.
Длина: 16 байт.
md5(md5($salt).md5($pass))
81f87275dd805aa018df8befe09fe9f8:wH6_S
Применяется в IPB.
Длина: 16 байт.
md5(md5($salt).$pass)
816a14db44578f516cbaef25bd8d8296:1234
Применяется в MyBB.
Длина: 16 байт.
md5($salt.$pass.$salt)
a3bc9e11fddf4fef4deea11e33668eab:1234
Применяется в TBDev.
Длина: 16 байт.
md5($salt.md5($salt.$pass))
1d715e52285e5a6b546e442792652c8a:1234
Применяется в DLP.
Длина: 16 байт.
SHA-1
356a192b7913b04c54574d18c28d46e6395428ab
Применяется во многих форумах и CMS.
Длина: 20 байт.
sha1(strtolower($username).$pass)
Admin:6c7ca345f63f835cb353ff15bd6c5e052ec08e7a
Применяется в SMF.
Длина: 20 байт.
sha1($salt.sha1($salt.sha1($pass)))
cd37bfbf68d198d11d39a67158c0c9cddf34573b:1234
Применяется в Woltlab BB.
Длина: 20 байт.
SHA-256(Unix)
$5$12345678$jBWLgeYZbSvREnuBr5s3gp13vqi…
Применяется в Linux и др. подобных ОС.
Длина: 55 символов.
Описание: хэш начинается с сигнатуры $5$, затем идет соль (до 8 случайных символов, в нашем примере солью является строка «12345678″), еще один символ $, а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 5000 вызовов алгоритма SHA-256.
SHA-512(Unix)
$6$12345678$U6Yv5E1lWn6mEESzKen42o6rbEm…
Применяется в Linux и др. подобных ОС.
Длина: 98 символов.
Описание: хэш начинается с сигнатуры $6$, затем идет соль (до 8 случайных символов, в нашем примере солью является строка «12345678″), еще один символ $, а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 5000 вызовов алгоритма SHA-512.
Комментарии
Всего: 8 |
Какой хеш начинается с
Помогите определить тип хеша. Вот он 17463089ccd29d4b57b3e53b7a2d0b18.
Только не нужно тыкать во всякие темы. Спасибку тыкну)
Читай
Как определить тип хэша.
1) Если хэш начинается с сигнатуры $1$, то обычно это MD5(Unix) хэш.
Если хэш начинается с сигнатуры $apr1$, то обычно это MD5(APR) хэш.
Хэши длиной 8 байт (16 символов), могут быть: MySQL-хэш или любой более длинный хэш, «урезанный» до длины 8 байт.
Длину 16 байт (32 символа) обычно имеют следующие типы хэшей: MD5, его salt’овые и составные производные (например, md5(md5($pass).$salt), md5(md5($pass))), MD4 а также другие хэши.
Если хэш имеет длину 20 байт (40 символов), то это может быть SHA-1 или MySQL5-хэш.
DES(Unix) хэш имеет длину 13 символов.
Хэши паролей популярной игры Lineage II C4 начинаются с 0x и имеет длину 34 символа.
2) Если тип хэша неизвестен, то нужно узнать — какой алгоритм применяется в программе, из которой хэш был извлечен. Например, можно проанализировать исходные тексты PHP-скрипта, в котором используется этот хэш.
3) В распространенных скриптах и программах по умолчанию используються следующие типы хэшей (так же указаны названия таблиц и длина соли):
IPB 2.x.x — md5(md5($salt).md5($pass)), префикс — whb_, таблица — members_converge, salt — 5 символов
IPB 1.x — md5($pass), префикс — whb_, таблица — members
vBulletin 3.x.x — md5(md5($pass).$salt), префикс — нет, таблица — user, salt — 3 символа
SMF 1.1.x — sha1($username.$pass), префикс — smf_, таблица — members
phpBB 2.0.1 — 2.0.21 — md5($pass), префикс — phpbb_, таблица — users
phpBB 3.x — MD5(phpBB3)
YaBB — MD5(HMAC)
PunBB 1.2.x — SHA-1, префикс — нет, таблица — users
e107 — md5(md5($pass))
Beehive — md5($pass), префикс — нет, таблица — USER
Intellect Board — md5($pass), префикс — нет, таблица — User
MercuryBoard- md5($pass), префикс — mb_, таблица — users
MiniBB- md5($pass), префикс — minibbtable_, таблица — users
myBB 1.2.x — md5(md5($salt).md5($pass)), префикс — mybb_, таблица — users
PBLang — md5($pass), в файле /db/members/имя_юзера
PhpMyForum — md5($pass), префикс — pmf_, таблица — user
QuickSilver Forum — md5($pass), префикс — qsf_, таблица — users
UseBB — md5($pass), префикс — usebb_ , таблица — members
Vanilla — md5($pass), префикс — LUM_, таблица — User
VikingBoard — md5($pass), префикс — vboard_, таблица — member
W-Agora — md5($pass), префикс — [название]_. таблица — users
Liberty Reserve API/SCI — SHA256
TBDev v2.0 — md5($salt.$pass.$salt)
TorrentStrike v0.4 — md5($salt.$pass.$salt)
Lineage II C4 — lineage2_c4
4) Salt (соль) – это строка из случайных символов, сохраняется либо вместе с самим хэшем (к примеру, в MD5(Unix)) либо отдельно от хэша, обычно в таблице рядом с ним.
5) Всегда можно увидеть, как выглядит тот или иной хэш, используя сервис [Ссылки могут видеть только зарегистрированные и активированные пользователи] где представлено около 100 видов хэшей.
6) Иногда хэш может быть в Base64-кодировке и для его анализа хэш лучше преобразовать в более удобный 16-ричный вид. Для этого также можно использовать вышеупомянутый сервис или соответствующий инструмент в программе PasswordsPro.
28.03.2010, 18:57
Читай
Как определить тип хэша.
1) Если хэш начинается с сигнатуры $1$, то обычно это MD5(Unix) хэш.
Если хэш начинается с сигнатуры $apr1$, то обычно это MD5(APR) хэш.
Хэши длиной 8 байт (16 символов), могут быть: MySQL-хэш или любой более длинный хэш, «урезанный» до длины 8 байт.
Длину 16 байт (32 символа) обычно имеют следующие типы хэшей: MD5, его salt’овые и составные производные (например, md5(md5($pass).$salt), md5(md5($pass))), MD4 а также другие хэши.
Если хэш имеет длину 20 байт (40 символов), то это может быть SHA-1 или MySQL5-хэш.
DES(Unix) хэш имеет длину 13 символов.
Хэши паролей популярной игры Lineage II C4 начинаются с 0x и имеет длину 34 символа.
2) Если тип хэша неизвестен, то нужно узнать — какой алгоритм применяется в программе, из которой хэш был извлечен. Например, можно проанализировать исходные тексты PHP-скрипта, в котором используется этот хэш.
3) В распространенных скриптах и программах по умолчанию используються следующие типы хэшей (так же указаны названия таблиц и длина соли):
IPB 2.x.x — md5(md5($salt).md5($pass)), префикс — whb_, таблица — members_converge, salt — 5 символов
IPB 1.x — md5($pass), префикс — whb_, таблица — members
vBulletin 3.x.x — md5(md5($pass).$salt), префикс — нет, таблица — user, salt — 3 символа
SMF 1.1.x — sha1($username.$pass), префикс — smf_, таблица — members
phpBB 2.0.1 — 2.0.21 — md5($pass), префикс — phpbb_, таблица — users
phpBB 3.x — MD5(phpBB3)
YaBB — MD5(HMAC)
PunBB 1.2.x — SHA-1, префикс — нет, таблица — users
e107 — md5(md5($pass))
Beehive — md5($pass), префикс — нет, таблица — USER
Intellect Board — md5($pass), префикс — нет, таблица — User
MercuryBoard- md5($pass), префикс — mb_, таблица — users
MiniBB- md5($pass), префикс — minibbtable_, таблица — users
myBB 1.2.x — md5(md5($salt).md5($pass)), префикс — mybb_, таблица — users
PBLang — md5($pass), в файле /db/members/имя_юзера
PhpMyForum — md5($pass), префикс — pmf_, таблица — user
QuickSilver Forum — md5($pass), префикс — qsf_, таблица — users
UseBB — md5($pass), префикс — usebb_ , таблица — members
Vanilla — md5($pass), префикс — LUM_, таблица — User
VikingBoard — md5($pass), префикс — vboard_, таблица — member
W-Agora — md5($pass), префикс — [название]_. таблица — users
Liberty Reserve API/SCI — SHA256
TBDev v2.0 — md5($salt.$pass.$salt)
TorrentStrike v0.4 — md5($salt.$pass.$salt)
Lineage II C4 — lineage2_c4
4) Salt (соль) – это строка из случайных символов, сохраняется либо вместе с самим хэшем (к примеру, в MD5(Unix)) либо отдельно от хэша, обычно в таблице рядом с ним.
5) Всегда можно увидеть, как выглядит тот или иной хэш, используя сервис [Ссылки могут видеть только зарегистрированные и активированные пользователи] где представлено около 100 видов хэшей.
6) Иногда хэш может быть в Base64-кодировке и для его анализа хэш лучше преобразовать в более удобный 16-ричный вид. Для этого также можно использовать вышеупомянутый сервис или соответствующий инструмент в программе PasswordsPro.
Хеш-таблица
Существует два основных вида хеш-таблиц: с цепочками и открытой адресацией. Хеш-таблица содержит некоторый массив [math]H[/math] , элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица с цепочками).
Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Хеш-код [math]i = h(key)[/math] играет роль индекса в массиве [math]H[/math] , а зная индекс, мы можем выполнить требующуюся операцию (добавление, удаление или поиск).
Количество коллизий зависит от хеш-функции; чем лучше используемая хеш-функция, тем меньше вероятность их возникновения.
Вероятность коллизий при вставке в хеш-таблицу превышает 50%
Пусть хеш-таблица имеет размер [math]len[/math] и в нее добавляют [math]n[/math] элементов. Рассмотрим [math]
‘(n)[/math] — вероятность того, что не возникнет ни одной коллизии. Добавим два любых элемента в нашу хеш-таблицу. Вероятность того, что они не попадут в одну и ту же ячейку таблицы равна [math]1 — \dfrac[/math] . Возьмем еще один элемент. Тогда вероятность того, что третий элемент не попадет в одну из уже занятых ячеек равна [math]1 — \dfrac[/math] . Рассуждая аналогичным образом, получим формулу: [math]
‘(n) = \left( 1 — \dfrac\right )\cdot \left( 1 — \dfrac\right )\dots\left( 1 — \dfrac\right ) = \dfrac> = \dfrac \cdot \left (len — n \right)!>[/math]
Тогда [math]
(n)[/math] — вероятность возникновения коллизии равна: [math]p(n) = 1 —
‘(n)[/math] ,
Способ разрешения коллизий — важная составляющая любой хеш-таблицы.
Полностью избежать коллизий для произвольных данных невозможно в принципе, и хорошая хеш-функция в состоянии только минимизировать их количество. Но, в некоторых специальных случаях их удаётся избежать. Если все ключи элементов известны заранее, либо меняются очень редко, то можно подобрать хеш-функцию, с помощью которой, все ключи будут распределены по хеш-таблице без коллизий. Это хеш-таблицы с прямой адресацией; в них все операции, такие как: поиск, вставка и удаление работают за [math]O(1)[/math] .
Если мы поделим число хранимых элементов на размер массива [math]H[/math] (число возможных значений хеш-функции), то узнаем коэффициент заполнения хеш-таблицы (англ. load factor). От этого параметра зависит среднее время выполнения операций.
Хеширование
Хеширование (англ. hashing) — класс методов поиска, идея которого состоит в вычислении хеш-кода, однозначно определяемого элементом с помощью хеш-функции, и использовании его, как основы для поиска (индексирование в памяти по хеш-коду выполняется за [math]O(1)[/math] ). В общем случае, однозначного соответствия между исходными данными и хеш-кодом нет в силу того, что количество значений хеш-функций меньше, чем вариантов исходных данных, поэтому существуют элементы, имеющие одинаковые хеш-коды — так называемые коллизии, но если два элемента имеют разный хеш-код, то они гарантированно различаются. Вероятность возникновения коллизий играет немаловажную роль в оценке качества хеш-функций. Для того чтобы коллизии не замедляли работу с таблицей существуют методы для борьбы с ними.
Определение: |
[math]U [/math] — множество объектов (универсум). [math]h : U \rightarrow S = \mathcal 0 \dots m — 1 \mathcal [/math] — называется хеш-функцией, где множество [math]S[/math] хранит ключи из множества [math]U[/math] . Если [math]x \in U[/math] значит [math]h(x) \in S[/math] Коллизия (англ. collision): [math]\exists x \neq y : h(x) = h(y)[/math] |
Виды хеширования
- По способу хранения:
Статическое — фиксированное количество элементов. Один раз заполняем хеш-таблицу и осуществляем только проверку на наличие в ней нужных элементов,
Динамическое — добавляем, удаляем и смотрим на наличие нужных элементов.
- По виду хеш-функции:
Свойства хеш-таблицы
На поиск элемента в хеш-таблице в худшем случае, может потребоваться столько же времени, как и в списке, а именно [math]\Theta(n)[/math] , но на практике хеширование более эффективно. При некоторых разумных допущениях математическое ожидание времени поиска элемента в хеш-таблице составляет [math]O(1)[/math] . А все операции (поиск, вставка и удаление элементов) в среднем выполняются за время [math]O(1)[/math] . При этом не гарантируется, что время выполнения отдельной операции мало́, так как при достижении некоторого значения коэффициента заполнения необходимо перехешировать таблицу: увеличить размер массива [math]H[/math] и заново добавить в новую хеш-таблицу все пары.
Хеширование в современных языках программирования
Почти во всех современных языках присутствуют классы, реализующие хеширование. Рассмотрим некоторые из них.
- Java
- HashMap [1] — реализация интерфейса ассоциативного массива с использованием хеш-таблицы,
- HashSet [2] — реализация интерфейса множества с использованием хеш-таблицы,
- LinkedHashMap [3] — потомок класса HashMap. Позволяет просматривать значения в том порядке, в котором они были добавлены.
- unordered_map [4] — реализация интерфейса ассоциативного массива с использованием хеш-таблицы,
- unordered_set [5] — реализация интерфейса множества с использованием хеш-таблицы.
- dict [6] — реализация интерфейса ассоциативного массива с использованием хеш-таблицы,
- set [7] — реализация интерфейса множества с использованием хеш-таблицы.
Примечания
- ↑HashMap — Java Platform SE 7
- ↑HashSet — Java Platform SE 7
- ↑LinkedHashMap — Java Platform SE 7
- ↑unordered_map — cplusplus.com
- ↑unordered_set — cplusplus.com
- ↑dictobject.c — https://github.com/python/cpython
- ↑setobject.c — https://hg.python.org
Источники информации
- Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. «Алгоритмы. Построение и анализ» — «Вильямс», 2011 г. — 1296 стр. — ISBN 978-5-8459-0857-5, 5-8459-0857-4, 0-07-013151-1
- Дональд Кнут. «Искусство программирования, том 3. Сортировка и поиск» — «Вильямс», 2007 г. — 824 стр. — ISBN 0-201-89685-0
- Википедия — Хеш-таблица
- Дискретная математика и алгоритмы
- Хеширование
- Структуры данных