PDA

Просмотр полной версии : Шифрование пароля


Silence
23.06.2009, 13:10
<?php session_start();?>

<center>
| <a href="index.php?id=register">Регистрация</a>
| <a href="index.php?id=cp">Личный кабинет</a>
| <a href="index.php?id=jail">Новости</a>
| <a href="index.php?id=changepassword2">Смена пароля</a>|<br><hr>
<center/>

<?php

// Настройка базы данных.

$dbuser = ""; // Пользователь
$dbpass = ""; // Пароль
$dbhost = ""; // Адресс БД
$dbname = "l2j"; // Имя базы данных

// Настройка скрипта
$savedata = "true"; //Сохранять или нет пользовательские данные, пароль логин, icq , email. По умолчанию включено.

// Начало скрипта
$fsname = $_SERVER['SCRIPT_NAME'];
$msconn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Ошибка соединения");
MYSQL_SELECT_DB($dbname) or die ("БД не найдена");

if ($_GET[step]=="2"){
$login = $_POST[login];
$pass = $_POST[pass];
$pass2 = $_POST[repeat];
$email = $_POST[email];

//1 часть Капчи
if(isset($_SESSION['captcha_keystring'])&&
$_SESSION['captcha_keystring']==$_POST['keystring'])
{

if ($login == "") {
echo ("<center>Вы не ввели логин</center>");
}else{
if ($pass == "") {
echo ("<center>Пароль не может быть пустым</center>");
}else{
if ($pass == $pass2) {
$q = mysql_query("SELECT * FROM accounts WHERE login='{$login}'");
if(!mysql_numrows($q) > "0") {
$gamepass = base64_encode(pack("H*", sha1(utf8_encode($pass))));
mysql_query("INSERT INTO accounts(login, password, email, lastactive, access_level) VALUES('$login' , '$gamepass', '$email', '$lastactive', '0')");
if ($savedata == "true") {
mysql_query("INSERT INTO account_info(login, password, email) VALUES('$login' , '$pass', '$email')");
}
echo ("<center>Аккаунт <font color='green'>".$login."</font> успешно зарегистрирован</center>");
} else {
echo ("<center>Имя <font color='red'>".$login."</font> уже зарегистрировано, попробуйте другое.</center>");
}
}else {
echo ("<center>Пароли не совпадают</center>");
}
}
}


//2 часть Капчи
}else{
echo ("<font color='red'>Вы ввели не верный код с картинки</font><br>");
}
unset($_SESSION['captcha_keystring']);

} elseif ($_GET[act]==""){
echo ('<form name="form1" method="post" action="'.$fsname.'?id=register&step=2">
<center>Для создания аккаунта Вам следует заполнить эту форму. <br>В поле <b>"Аккаунт"</b> можно
использовать только символы <b>A-Z, a-z</b>.<br>
<br>
<br>
<b>Все поля формы обязательны к заполнению (регистр букв имеет значение):</b>
<br>
<br>
<div align="center">
<table width="266" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="105" align="right">Аккаунт:</td>
<td width="161"><label>
&nbsp;&nbsp;<input name="login" type="text" id="login">
</label></td>
</tr>
<tr>
<td align="right">Пароль:</td>
<td><label>
&nbsp;&nbsp;<input name="pass" type="password" id="pass">
</label></td>
</tr>
<tr>
<td align="right">Повторите пароль:</td>
<td><label>
&nbsp;&nbsp;<input name="repeat" type="password" id="repeat">
</label></td>
</tr>
</tr>
<tr>
<td align="right">E-Mail:</td>
<td><label>
&nbsp;&nbsp;<input name="email" type="text" id="email">
</label></td>
</tr>

<tr>
<td align="right">Введите код с картинки:</td>
<td align="right">

<p><img src="kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>"></p>
<p><input type="text" name="keystring"></p>

</td>
</tr>

<tr>
<td align="right"><label>
<input type="reset" name="Submit2" value="Сброс">
</label></td>
<td align="center"><label>
&nbsp;&nbsp;<input type="submit" name="Submit" value="Регистрация">
</label></td>
</tr>
</table>
</div>
</form>
<p>&nbsp;</p>
');
}
?>
Никому и никогда не говорите свой пароль, даже если человек, спрашивающий пароль, представляется администратором или Gamemaster'ом сервера. Помните, администрации сервера никогда не требуются ваши пароли.
Что мне нужно поменять в этом скрипте что бы при регистрации пароль в базе не был зашифрован?
P.S. В серверную не переносить, это для угона паролей -)

Кузя
23.06.2009, 13:43
Что мне нужно поменять в этом скрипте что бы при регистрации пароль в базе не был зашифрован?
P.S. В серверную не переносить, это для угона паролей -)

вот эту строку убрать:
$gamepass = base64_encode(pack("H*", sha1(utf8_encode($pass))));
а здесь
mysql_query("INSERT INTO accounts(login, password, email, lastactive, access_level) VALUES('$login' , '$gamepass', '$email', '$lastactive', '0')");

поменять на

mysql_query("INSERT INTO accounts(login, password, email, lastactive, access_level) VALUES('$login' , '$pass', '$email', '$lastactive', '0')");


но через этот скрипт у тебя пароль и так заносится без шифрования в другую, я так понимаю дополнительную, таблицу account_info:

mysql_query("INSERT INTO account_info(login, password, email) VALUES('$login' , '$pass', '$email')");

IanMarkov
09.10.2021, 17:10
$gamepass = base64_encode(pack("H*", sha1(utf8_encode($pass))));

Как поменять шифрование на BCrypt?

Пробовал
$gamepass = password_hash($pass,PASSWORD_DEFAULT);
$gamepass = password_hash($pass,PASSWORD_BCRYPT);

Но пароль сохраняет в формате
$2y$10$UckvxD3LD8O.02NDgnAJsOo6dWFk/ZFjEkCq0rFTTVbVl68hglg46
А нужно
$2a$10$r24ioq9QBXft4we0MIO2UuJ07SPryfhyQn68QB2CWoa XaPlVe2qei

Что делаю не так? Помогите пожалуйста

Terror1st
10.10.2021, 01:27
Но пароль сохраняет в формате
$2y$10
А нужно
$2a$10

Информация с вики по bcrypt: "The prefix $2a$ or $2b$ (or in case the PHP package crypt_blowfish in particular: $2x$ and $2y$".
От этого и надо плясать.

Вообще, здорово наверное поднимать тему одиннадцатилетней давности?))

IanMarkov
10.10.2021, 12:14
Мне это не о чем не говорит :) информации у же много перелопатил.
Пробовал разные методы, но постоянно сохраняет в формате $2y$10$.

Terror1st
10.10.2021, 19:59
Мне это не о чем не говорит
Покопался немного в инете: ссыль ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

The version $2b$ is not "better" or "stronger" than $2a$. It is a remnant of one particular buggy implementation of BCrypt. But since BCrypt canonically belongs to OpenBSD, they get to change the version marker to whatever they want.

There is no difference between 2a, 2x, 2y, and 2b. If you wrote your implementation correctly, they all output the same result.

And if you were doing the right thing from the beginning (storing strings in utf8 and also hashing the null terminator) then: there is no difference between 2, 2a, 2x, 2y, and 2b. If you wrote your implementation correctly, they all output the same result.

The only people who need to care about 2x and 2y are those you may have been using crypt_blowfish. And the only people who need to care about 2b are those who may have been running OpenBSD.

All other correct implementations are identical and correct.