2013-08-11 3 views
2

У меня есть приложение чата, работающее на сервере php WebSocket.Можно ли сделать общедоступным хеш-файл md5 другого пользователя SESSID?

Когда клиент подключается, я отправляю ему объект с идентификатором и псевдонимом других пользователей. Мне нужно отправить эти идентификаторы, чтобы, когда пользователь что-то говорит или отключает и т. Д., Другие пользователи могут узнать, кто сказал это или отключился, и т. Д.

Серверная сторона Я работаю с SESSID, потому что использую $_SESSION данные, но, конечно, я не могу опубликовать список SESSID.

Тогда можно использовать md5($userId) (где $userId SESSID), или можно захватить сеанс из его хэш-памяти md5?

+0

Почему бы просто не создать новый идентификатор? Почему он должен основываться на идентификаторе сеанса? – Gumbo

+0

@Gumbo Я знал, что могу это сделать, но тогда я должен проверить, принадлежит ли новый сгенерированный идентификатор другому пользователю. С 'md5 ($ userId)', '$ user_Id' является уникальным, и поскольку md5 hash длиннее, чем SESSID, я думаю, что' md5 ($ userId) 'тоже уникально (я тоже планировал спросить его, если хеш-файл md5 был бы безопасным). – Oriol

ответ

1

Хеши не лучшие вещи для обеспечения безопасности, и я бы не рекомендовал его в большинстве случаев.

Но в этом случае есть разница:

Все SSID являются нонсенсом (я имею в виду, они являются случайными), так что если вы добавляете необходимы соль, чтобы сделать ваш

salt.length + $userId.length 

более чем 32 символа (чтобы быть на стороне безопасности, сделать его более 128 символов), это логически невозможно, чтобы расшифровать хэш. дешифрование было бы похоже на переделку файла из его хэша! что невозможно

Чтобы сделать вещи проще, вот код, который нужно:

function YourNewHashMaker($str) 
{ 
return sha1(md5("Some Random Salt".$str).$str."Another Random Salt!".sha1("This one is too much".$str)); 
} 

Используйте это так:

YourNewHashMaker($userId); 

только безопасность дыра здесь, вероятность того, что кто-то крадет ваш код и начинает делать радужный стол, который является ДЕЙСТВИТЕЛЬНО трудно сделать. а также одно и то же отверстие безопасности всех других хешей.

Edit: Помните, что все, что идея, которую вы имеете, чтобы сделать свои собственные hashmakers, помните, что выходная строка должна быть сгенерирована с помощью утвержденного алгоритма. Другими словами, Не добавляйте ничего до или после 'sha1 (....)', только внутри функции.

Надеюсь, что это поможет.

+1

Мне это нравится. Но если я это хорошо понимаю, невозможно переделать файл из его хэша, потому что есть много (бесконечность?) Файлов, которые имеют одинаковый хеш. Тогда, могу ли я быть уверенным, что разные SESSID будут давать разные результаты? – Oriol

+0

Это разница между всеми возможными файлами, которые могут существовать (бесконечность), и теми файлами, которые существуют. Поскольку общее количество всех файлов не менее 26^32 файлов, так что было бы чудом увидеть два файла с одинаковым хэшем. такая же логика применяется для SSID, причем гораздо меньше возможностей. – aliqandil

2

Любая хеш-функция, используемая в этом контексте, была бы небезопасной, и выбор MD5 в качестве хеш-функции означает, что вы не знаете о передовых методах, связанных с криптографическими функциями. MD5 был сломан в течение многих лет и никогда не должен использоваться ни для чего, никогда. (Даже sha1 более безопасен и быстрее, но вы, вероятно, тоже не должны использовать SHA1).

С этим связано множество проблем. Прежде всего, это должно быть trivial to crack, так как любое небольшое число должно быть в радужном столе. Злоумышленник должен знать каждое значение SESSID. В качестве идентификатора сеанса используйте PHP session_start(). Если вам нужен токен, используйте криптографический nonce. Если вы не понимаете саму основы хэш-функций, то не используют хеш-функцию.

+0

Конечно, соление хэша может победить проблему радужного стола. И назвать «MD5» сломанным и непригодным для _anything_ слишком много. Конечно, жесткая защита может не понравиться больше, но как хэш, проверяющий загрузку? Я не вижу здесь серьезных проблем, если честно? – Nanne

+0

Хорошо, я не буду использовать md5. Но просто примечание: я не могу использовать 'session_start()', потому что тогда я запускаю сеанс с скриптом сервера php websocket, а не с каждым клиентом, поэтому я должен хранить серверную часть SESSID. – Oriol

+0

@Rook Что означает «* nonce *»? Я не думаю, что это http://www.wordreference.com/definition/nonce – Oriol