Хэш или нет?

Вопросы по программированию, не подходящие в другие разделы.

Модераторы: Naeel Maqsudov, C_O_D_E

Ответить
AkRomiresS
Сообщения: 3
Зарегистрирован: 29 июл 2015, 23:33

29 июл 2015, 23:47

Доброго времени суток.

Помогите, пожалуйста, разобраться.

Есть несколько строк, не могу понять, хэш это или просто произвольные наборы символов.
Длина 64 символа, присутствуют латинские буквы в верхнем и нижнем регистре, цифры, из символов присутствуют "~", ".", "-", "_"

Примеры:
1. T~TVA5MCB~hcmpTulimpvOhmbjJivrwX2vaR941w-UCkBNeapcULs0a.4TnN74Dp
2. ~aybNLEzDy64At9qrPLMfuikz.6J6gib40nAHirvdt8RsyovC1Lxyn8vKnDctEG0
3. pDs7_uVNcfiwYeudJAQHJzcLPALOdMYiQGSCdLc0mtaEySCxQKhppfMqy8zKHZVF

Как можно определить хэш это или просто строка? Если хэш, то что за алгоритм?

Спасибо.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

30 июл 2015, 16:00

Как можно определить хэш это или просто строка?
Достоверного ответа не существует. Кто знает, у кого что на уме. Достаточно по-XOR-ить обычный BASE64 или MD5 и уже нельзя будет определить его тип.
It's a long way to the top if you wanna rock'n'roll
AkRomiresS
Сообщения: 3
Зарегистрирован: 29 июл 2015, 23:33

30 июл 2015, 16:06

Достоверного ответа не существует.
А существуют ли алгоритмы с хэшем длиной 64 символа и набором символов [a-zA-Z0-9~._-] ?
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

30 июл 2015, 16:22

Не знаю насчет множества символов - то это в основном HEX, но если каждую пару HEX рассматривать как код символа, то вполне может получится такой хеш. 64 символа имеют SHA256, EDON-R256, Snefru256, HAVAL256, RIPEMD256 и т.д., но я чувствую тут нужен HEX-based хеш длиной 384 бита (6 бит на символ * 64 символа)
It's a long way to the top if you wanna rock'n'roll
AkRomiresS
Сообщения: 3
Зарегистрирован: 29 июл 2015, 23:33

30 июл 2015, 16:45

нужен HEX-based хеш длиной 384 бита
Спасибо, подумаю в этом направлении.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

20 авг 2015, 10:17

AkRomiresS писал(а):А существуют ли алгоритмы с хэшем длиной 64 символа и набором символов [a-zA-Z0-9~._-] ?
Хеш может быть любой постоянной длины, хоть на пару десятков гибибайт. И даже если на какую нибудь длину нет стандартной криптограической хеш-функции, можно ведь и конкатенировать два разных хеша одного пароля, в результате снова получится хеш, но суммарной длины, или же написать свою хеш-функцию с ноля, причём, не обязательно даже криптографическую. А для того, чтоб конкатенируемые хеши не совпадали, можно использовать или хеш-фукнции, реализующие разные алгоритмы, или две разные "соли", и сразу и два алгоритма, и две "соли". Будет ли взлом конкатенации хешей сложней, чем каждого из хешей в отдельности - это вопрос отдельный, но сделать так можно и получится снова хеш.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

20 авг 2015, 10:27

Но именно это - не хеш по какому то одному алгоритму, пусть даже и составному, так как длина первого примера 64 символа, а второго и третьего - не 64, а 65 символов. Хеш же по определению имеет не только коллизии, но и постоянную длину, ни как не зависящую от исходных данных. Возможно это какой то другой код с коллизиями. Но не хеш по какому то одному алгоритму. Если это всё таки хеши, то они имеют разное назначение и получены по как минимум двум разным алгоритмам. И ломать их как один набор нельзя. Два последних примера могут быть хешами из одного набора, но первый явно из другого.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

20 авг 2015, 10:57

Пример кода с колизиями, но не хеша:

Код: Выделить всё

char *p;
size_t i;
for (p=s; *p!=0; ++p);
for (--p, i=0; *s!=0; ++s, --p, ++r, ++i)
{
 *r=*s;
 *r^=*p;
}
*r=0;
. Результат имеет ту же длину, что и исходная строка, но понять, какая именно строка была исходной, не возможно, так как часть информации из неё теряется.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

20 авг 2015, 11:00

Например, при исходных строках: "1234", "4321", "3456" и "6543" результат будет один и тот же, коды символов результата будут 5 1 1 5.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить