Этот раздел знакомит с функцией MD5, а также описывает механизм ее применения в реализации MD5-покер на примере двух простых игр : камень-ножницы-бумага и упрощенного варианта двух карточной секи

Что такое MD5?
MD5 вместо карт.
MD5 сека.

Что такое МD5?

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

Для произвольной последовательности символов функция MD5 вычисляет символьную последовательность длины 32 в алфавите шестнадцатеричных цифр: 0-9,a,b,c,d,e,f.
При этом, как всякая хэш-фунция, MD5 обладает следующим свойством

Если MD5(str1) = MD5(str2), то str1 = str2 для любых строк str1,str2.

Другими словами, не существует разных строк с одинаковым значением функции MD5 на этих строках.

Значение функции MD5 на последовательности будем называть MD5-снимком этой последовательности. Поэтому вышеприведенное свойство можно сформулировать так:
Не существует двух разных последовательностей с одинаковым МD5-снимком.

Все как у людей :) - не существует двух разных людей с одинаковым фото снимком.

Свойство носит практический характер, т.к. теретически (математически) оно неверно. Ведь множество всех значений ( последовательностей длины 32 в алфавите 0-9,a,b,c,d,e,f ) конечно, а множество аргументов ( произвольных символьных последовательностей ) бесконечно. Однако случаи, когда оно неверно ( коллизии ) обнаруживаются редко и не обладают известной закономерностью, так что этими случаями можно пренебречь в практической деятельности. Что собственно и делается в IT. Мы также будем исходить из того, что указанное свойство практически имеет место.


MD5 вместо карт.

Принцип использования хэш функции MD5 вместо карт в MD5 покере начнем объяснять на примере реализации в интернете намного более простой карточной игры - однокарточного покера. На эту тему есть видео
Правила игры. Играют двое - Игрок 1 и Игрок 2. Для игры используется колода шестнадцатеричных карт, которая тщательно перемешивается. Первая карта в колоде дается Игроку 1, вторая - Игроку 2. Чья карта старше тот и выиграл. Если символы одинаковы то ничья.
Здесь и дальше шестнадцатеричные карты это карты без мастей со значениями 0,1,...,9,a,b,c,d,e,f по 10 карт каждого значения. ( И на эту тему есть видео)
Покажем как в эту игру можно играть посредством обмена сообщениями.

Последовательность LAY , по определению, состоит из 11 символов - первый символ #, а остальные 10 это произвольные смиволы из алфавита 0-9,a-z,A-Z ( цифры и латинские буквы большие и маленькие). Вобщем LAY-последовательность это что-то типа пароля, фиксированной длины и (на всякий случай) без спецсимволов
Примеры. #UMbzwJ9Jz3, #LaY1ytgZGK, #ZwldFB6oNZ .

Дальше играют по следующему протоколу обмена сообщениями. Нарушитель протокола объявляется проигравшим!
1 Игрок 1 создает у себя на компьютере LAY-последовательность LAY1, вычисляет значение MD5(LAY1) и сообщает Игроку 2 это значение, 32 символьную последовательность в алфавите 0-9,a,b,c,d,e,f.
Пример. Игрок 1 создает последовательность #HB8ldd8mrz, вычисляет MD5(#HB8ldd8mrz)=60959aee16321f8370a6939ff3865c2d и пересылает Игроку 2 последовательность 60959aee16321f8370a6939ff3865c2d
2 Игрок2, получив некую 32-символьную последовательность MD5(LAY1) , создает у себя на компьютере свою LAY-последовательность символов LAY2 и сообщает ее Игроку 1
Продолжаем пример. Игрок2, получив последовательность 60959aee16321f8370a6939ff3865c2d , создает последовательность LAY2 = #IkeOsWMR4i и сообщает(пересылает) эту последовательность Игроку 1.
3 Игрок 1, получив LAY2, сообщает Игроку 2 последовательность LAY1
4 Получив последовательность LAY1, Игрок 2 вычисляет MD5(LAY1) и убеждается что вычисленное значение MD5(LAY1) равно ранее полученному значению, обозначеннному MD5(LAY1).
5Обменявшись таким образом последовательностями LAY1 и LAY2, игроки сцепляют LAY1 и LAY2 в последовательность LAY1LAY2 и вычисляют MD5(LAY1LAY2) . Полученная 32-х символьная последовательность шестнадцатеричных цифр играет роль перетасованной колоды карт и называется раскладом. Если первый символ расклада больше второго - выиграл первый игрок, если меньше - второй, если символы равны - ничья.

Завершаем пример. Игроки получают последовательность LAY1LAY2 = #HB8ldd8mrz#IkeOsWMR4i, вычисляют MD5(#HB8ldd8mrz#IkeOsWMR4i) = 59f89d13527a3beb2990c88f0be3142a . Первая цифра полученной последовательности 5 , вторая - 9. Вторая цифра больше первой значит выиграл игрок 2.

Замечание 1. Игроки обменялись сообщениями в чате причем ни у одного из игроков не было возможности изменить (создать) свое сообщение, ознакомившись с сообщением опонента .

Замечание 2. Для упрощения генерации последовательностей типа LAY и вычиcления MD5 предлагается простенькая программа на JavaScript .
Калькулятор открыть     Калькулятор скачать

Описанная игра используется в денежном чат-розыгрыше, который проводятся в Телеграм.


MD5 сека.

Покажем, как сыграть в упрощенный вариант двукарточной секи по мессенджеру. Кстати сказать, из всех известных карточных игр ближе всего к покеру именно сека. На эту тему есть видео

Правила игры упрощенная сека. Играют двое шестнадцатеричными картами. Это значит картами без мастей со значениями 0,1,...,9,a,b,c,d,e,f по 10 карт каждого значения. Игроки вносят в банк по одной ставке и раздают по две карты. Получив карты, игроки оценивают стоимость своих двух карт - она равна сумме стоимостей карт, после чего начинают торговаться. Торговля упрощена до двух операций - выйти из игры, остаться в игре. Выходя из игры игрок забирает половину ставки, оставшийся игрок при этом получает оставшуюся сумму в банке - 3/4 банка. Если никто не вышел, игроки показывают друг другу карты . Выигрывает тот, у кого стоимость карт ( сумма стоимостей каждой карты ) больше . Выигрывший забирает банк. В случае ситуации ничья ставки из банка возвращаются.

Ниже описанную реализацию упрощенной секи будем называть MD5 сека.

Прежде всего отметим, что игра будет проходить в форме обмена сообщениями определенного ( несложного) формата по определенному несложному протоколу. Нарушитель протокола проигрывает.

Последовательность LAY состоит из 11 символов первый символ # остальные 10 это произвольные смиволы из алфавита 0-9,a-z,A-Z ( цифры и латинские буквы большие и маленькие).
Примеры. #UMbzwJ9Jz3, #LaY1ytgZGK, #ZwldFB6oNZ .

Последовательность HOLE состоит из двух частей. Первая часть ( префикс ) имеет вид N;M; , где N,M символьное изображение неравных чисел от 6 до 32 , а вторая часть представляет собой последовательность типа LAY.
Примеры. 9;18;#hoLe1d0q1f, 14;27;#IWMTHckn2L, 7;16;#KmYWQL78gL .

Указанные последовательности можно создавать вручную, но лучше использовать калькулятор, который упрощает все это дело и сводит создание последовательностей и вычисление соответствующих MD5 к нескольким кликам

Протокол игры
1 Игрок 1 создает последовательности LAY1, HOLE1 , вычисляет MD5(LAY1), MD5(HOLE1) и сообщает Игроку 2 вычисленные последовательности MD5(LAY1), MD5(HOLE1).
Пример. Игрок 1 создает последовательности LAY1 = #LaY1wJ9Jz3, HOLE1 = 9;18;#HoLe10q1fJ , вычисляет
MD5(#LaY1wJ9Jz3)=d2789700a4c6c7ccf428f647cfdcc05e
MD5(9;18;#HoLe10q1fJ)=b34a77473281a9a7c05897d7a2a7d2ed
и пересылает полученные последовательности Игроку 2

2 Игрок 2 , получив MD5(LAY1), MD5(HOLE1), создает у себя на компьютере последовательности LAY2 и HOLE2 и вычисляет значение MD5(HOLE2) и сообщает Игроку 1 последовательности LAY2, MD5(HOLE2)
Продолжение примера.Игрок 2, получив
MD5(LAY1)=c312f4d6014a2e32e0123ff969c3a6dd ,
MD5(HOLE1)= aa290383ee19994a9060e3c26d34fa51
создает последовательности
LAY2 = #LaY2tgZGKp, HOLE2 = 7;16;#HoLe2L78gL ,
вычисляет
MD5(7;16;#HoLe2L78gL)= 15c712363e64c676b476b6c1d72800b5
и пересылает Игроку 2 последовательности #LaY2tgZGKp и 15c712363e64c676b476b6c1d72800b5

3Игрок 1, получив LAY2, MD5(HOLE2) сообщает Игроку 2 последовательность LAY1
Продолжение примера. Игрок 1, Получив LAY2 = #LaY2tgZGKp, MD5(HOLE2)=15c712363e64c676b476b6c1d72800b5 сообщает Игроку 2 последовательность LAY1 = #LaY1wJ9Jz3

4Игрок 2, получив LAY1, вычисляет MD5(LAY1) и проверяет, что вычисленная им последовательность MD5(LAY1) равна ранее полученной MD5(LAY1)

5Игроки сцепляют последовательности LAY1 и LAY2, каждый получает последовательность LAY12 = LAY1LAY2 и вычисляет последоватеность MD5(LAY12) . Эта последовательность называется раскладом. Два символа на позициях указанных в последовательностях HOLE1(HOLE2) являются двумя картами(символами) Игрока1 (Игрока2)
Продолжаем пример. Игроки сцепляют последовательности LAY1 = #LaY1wJ9Jz3 и LAY2 = #LaY2tgZGKp, каждый получает последовательность LAY12 = #LaY1wJ9Jz3#LaY2tgZGKp и вычисляет последоватеность MD5(LAY12)=f219cf721101c0d960246021fb7f4f48 . Эта последовательность называется раскладом. Два символа на позициях, указанных в последовательностях HOLE1, HOLE2 являются

6Дальше начинается торговля. Первый символ расклада определяет кто ходит превым . Если символ нечетный (1,3,5,...,d,f), то ходит Игрок1 , а если четный (0,2,4,...,c,e), то ходит Игрок2.

7По окончанию торговли, если оба игрока остались в игре, происходит обмен последовательностями HOLE. Игрок1 высылает последовательность Игроку2, а Игрок2 высылает Игроку1 свою последовательность HOLE2. Игроки вычисляют MD5 на полученных последовательностях и убеждаются, что вычисленная последовательность MD5(HOLE1) (MD5(HOLE2)) совпадает с ранее полученной последовательностью MD5(HOLE1) (MD5(HOLE2)). После чего сравнивают свои пары символов. Чья пара имеет большую стоимость тот и выиграл - забирает банк.

Замечание 1. В МD5-покер играют по такому же протоколу обмена сообщениями. Единственное отличие заключается в оценке старшинства комбинации карт ( символов ), имеющихся у игроков. Здесь оценивается старшинство двух карт, а в MD5-покере старшинство семерки карт ( символов ). Протокол это отличие не затрагивает.

Замечание 2. Для упрощения генерации сообщений, вычиcления MD5 и оценки старшинства пар символов на заданном раскладе предлагается простенькая программа на JavaScript .
Калькулятор открыть     Калькулятор скачать

MD5 сека используется в денежных чат-розыгрышах, которые проводятся в Телеграм