Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Шифр паролей солью и MD5 (MySQL R39 - 2)

Статус
В этой теме нельзя размещать новые ответы.

Archive

Умник
Привет друзья! Вырезано из мода RakNet, да, знаю, прошу не бросаться тапками...

Для начала скачиваем include md5:

Прописываем к include :
PHP:
#include <md5>
Ко всем stock :
PHP:
stock gensalt() // соль
{
	new PassSimbols[] =
	{
		'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J' , 'k', 'K', 'l', 'L', 'm', 'M',
		'n', 'N', 'o', 'O', 'p', 'P', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z', '0', '1',
		'2', '3', '4', '5', '6', '7', '8', '9'
	};

	new str[6];
	for(new i;i < 5;i ++) str[i] = PassSimbols[random(sizeof(PassSimbols))];
	return str;
}

stock hashit(salt[],password[]) // шифр паролей MD5
{
    new step3[65],step4[33];
    format(step3,sizeof(step3),"%s%s",MD5_Hash(salt),MD5_Hash(password));

	new i = -1;
	while(step3[++i]) step3[i] = tolower(step3[i]);

    format(step4,sizeof(step4),"%s",MD5_Hash(step3));

	new z = -1;
	while(step4[++z]) step4[z] = tolower(step4[z]);
    return step4;
}
Далее переходим к enum pInfo :
PHP:
pass_hash[33],
pass_salt[6]
Переходим в диалог регистрации и вставляем перед записью данных в бд :
PHP:
strmid(PlayerInfo[playerid][pass_salt], gensalt(), 0, 6, 6);
strmid(PlayerInfo[playerid][pass_hash], hashit(PlayerInfo[playerid][pass_salt],inputtext), 0, 33, 33);

new string[250];
format(string, sizeof(string), "INSERT INTO accounts (Name, pass_hash, pass_salt) VALUES ('%s', '%s', '%s')", PlayerInfo[playerid][pName], PlayerInfo[playerid][pass_hash],
PlayerInfo[playerid][pass_salt]);
mysql_function_query(connect_mysql, string, true, "/* свой паблик регистрации */","i",playerid);
[!] Насчет записи в таблицы, смотрите сами, моды у каждого свои... [!]

В проверку зарегистрирован ли аккаунт, перед диалогом авторизации вставляем :
PHP:
cache_get_field_content(0, "pass_hash", PlayerInfo[playerid][pass_hash], connect_mysql, 33);
cache_get_field_content(0, "pass_salt", PlayerInfo[playerid][pass_salt], connect_mysql, 6);
Перейдем к диалогам авторизации :
PHP:
if(strcmp(hashit(PlayerInfo[playerid][pass_salt], inputtext),PlayerInfo[playerid][pass_hash], true ) == 0)
{
	 new strings[80];
	 format(strings, sizeof(strings), "SELECT * FROM accounts WHERE ID = %i LIMIT 0,1", PlayerInfo[playerid][pID]); // переменные pID и т.д заменяйте на свое
	 mysql_function_query(connect_mysql, strings, true, "/* свой паблик авторизации */", "ii",PlayerInfo[playerid][pID], playerid); 
}
Далее перейдем к самой загрузке, вставляем в паблик с загрузкой данных :
PHP:
cache_get_field_content(0, "pass_hash", PlayerInfo[playerid][pass_hash], connect_mysql, 33);
cache_get_field_content(0, "pass_salt", PlayerInfo[playerid][pass_salt], connect_mysql, 6);
Перейдем к самой базе данных.

Создаем столбцы в бд :


Опять же, ребята, заменяйте всё на свое, у каждого свои переменные т.д и т.п.
Спасибо!

p.s если данная тема или похожая есть - свою удалю.
p.s.s если что-то упустил, пишите, исправим.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу