Здравствуйте! Подскажите пожалуйста, в чем может быть ошибка?
Есть скрипт восстановления пароля:
PHP:
$db = mysql_connect('localhost','max','g1df5d');
mysql_select_db("mydb" ,$db);
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
//заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') {unset($email);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную
if (isset($login) and isset($email)) { //если существуют необходимые переменные
include ("bd.php"); // файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
$result = mysql_query("SELECT id FROM sum_users WHERE login='$login' AND email='$email'",$db); //такой ли у пользователя е-мейл
$myrow = mysql_fetch_array($result);
if (empty($myrow['id']) or $myrow['id']=='') {
//если активированного пользователя с таким логином и е-mail адресом нет
exit ("Пользователя с таким e-mail адресом не обнаружено <a href='index.php'>Главная страница</a>");
}
//если пользователь с таким логином и е-мейлом найден, то необходимо сгенерировать для него случайный пароль, обновить его в базе и отправить на е-мейл
$datenow = date('YmdHis'); //извлекаем дату
$new_password = md5($datenow); // шифруем дату
$new_password = substr($new_password, 2, 6); //извлекаем из шифра 6 символов начиная со второго. Это и будет наш случайный пароль. Далее запишем его в базу, зашифровав точно так же, как и обычно.
$new_password_sh = strrev(md5($new_password))."b3p6f"; //зашифровали
mysql_query("UPDATE sum_users SET password='$new_password_sh' WHERE login='$login'",$db); // обновили в базе
//формируем сообщение
$message = "Здравствуйте, ".$login."! Мы сгененриоровали для Вас пароль, теперь Вы сможете войти на сайт citename.ru, используя его. После входа желательно его сменить. Пароль:n".$new_password;//текст сообщения
mail($email, "Восстановление пароля", $message, "Content-type:text/plane; Charset=windows-1251rn"); //отправляем сообщение
echo "<html><head><meta http-equiv='Refresh' content='5; URL=index.php'></head><body>На Ваш e-mail отправлено письмо с паролем. Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='index.php'>нажмите сюда.</a></body></html>"; //перенаправляем пользователя
}
else {//если данные еще не введены
echo '
<html>
<head>
<title>Забыли пароль?</title>
</head>
<body>
<h2>Забыли пароль?</h2>
<form action="#" method="post">
Введите Ваш логин:<br><input type="text" name="login"><br><br>
Введите Ваш E-mail: <br><input type="text" name="email"><br><br>
<input type="submit" name="submit" value="Отправить">
</form>
</body>
</html>';
}
?>
Но новый сгенерированный пароль не подходит
где здесь может быть ошибка:
PHP:
$datenow = date('YmdHis'); //извлекаем дату
$new_password = md5($datenow); // шифруем дату
$new_password = substr($new_password, 2, 6); //извлекаем из шифра 6 символов начиная со второго. Это и будет наш случайный пароль. Далее запишем его в базу, зашифровав точно так же, как и обычно.
$new_password_sh = strrev(md5($new_password))."b3p6f"; //зашифровали
SQL Server 2014 Developer — duplicate (do not use) SQL Server 2014 Enterprise — duplicate (do not use) SQL Server 2014 Standard — duplicate (do not use) SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard Еще…Меньше
Проблемы
Предположим, что вы используете протокол TLS (Transport Layer Security) версии 1,2 в Microsoft SQL Server. Если сертификат, используемый для шифрования связи конечной точки для зеркального отображения базы данных, групп доступности и компонента Service Broker, использует алгоритм хэширования MD5, то связь завершается сбоем. Кроме того, в журнале ошибок SQL Server появляется следующее сообщение об ошибке:
Не удалось подтвердить соединение. Сбой вызова ОС: (80090331) 0x80090331 (клиент и сервер не могут взаимодействовать, так как у них нет общего алгоритма.). Состояние 58. «.
Кроме того, журнал Windows показывает следующую ошибку SChannel:
На удаленную конечную точку было создано неустранимое оповещение. Это может привести к завершению подключения. Протокол TLS определил код неустранимой ошибки 40. Состояние ошибки для канала SChannel в Windows — 1205.
Причина
Эта проблема возникает из-за того, что TLS 1,2 не поддерживает MD5 в качестве алгоритма хеширования подписей.
Решение
Согласно текущим рекомендациям по обеспечению безопасности и стандартам, рекомендуется переключаться на хэш подписи, не относящийся к MD5, для сертификатов, используемых для шифрования конечных точек SQL Server. Список фиксированных версий, поддерживающих TLS 1,2, можно найти в следующей статье Microsoft Knowledge Base:
3135244 Поддержка TLS 1,2 для Microsoft SQL Server
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе «Применяется к».
Ссылки
Ознакомьтесь с терминологией , которую корпорация Майкрософт использует для описания обновлений программного обеспечения.
Нужна дополнительная помощь?
Нужны дополнительные параметры?
Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.
В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 17
1
15.11.2012, 11:13. Показов 1871. Ответов 7
Здравствуйте! Подскажите пожалуйста, в чем может быть ошибка?
Есть скрипт восстановления пароля:
PHP | ||
|
Но новый сгенерированный пароль не подходит
где здесь может быть ошибка:
PHP | ||
|
Добавлено через 31 минуту
Код проверки авторизации:
PHP | ||
|
Добавлено через 3 минуты
Дело в том, что пароль из переменной $new_password_sh при хешировании, не совпадает с хешом записанным в mysql
0
Приветствую, написал страницу восстановления пароля, все отсылается и вносится вот только хеш другой какой-то получается. Например при заносе сгенерированного пароля в md5 шифратор хэш один, а у меня в базе тот же пароль с иным хэшем. Что-то здесь не складывается.
Вот код, может кто подскажет, что я упустил:
<?php
if($_SESSION['usern']) { header("Location: $url"); }
?>
<div class="bg-color white rounded event-item">
<div class="box-padding narrow">
<h3>Восстановление пароля</h3>
<?php
if(isset($_POST['do_reset'])) {
$email = protect($_POST['email']);
$select_is = mysql_query("SELECT * FROM users WHERE email = '$email'");
if(empty($email) ) { echo error("Введите адрес электронной почты."); }
elseif(!isValidEmail($email)) { echo error("Введите корректный email адрес."); }
else {
function gen($leight){
$x = '';
$str = "qWertYuiopaSdfgHjklzXcvbNm123456789";
for($i=0; $i<$leight; $i++){
$x .= substr($str, mt_rand(0, strlen($str)-1), 1);
}
return $x;
}
for ($i =0; $i < 1; $i++)
{
$mepas = (' ' .gen(10).'<br/>');
}
$mepas_md5 = md5($mepas);
$update_it = mysql_query("UPDATE users SET passwd='$mepas_md5' WHERE email = '$email'");
$mailtext = '<b><div style="text-align:left;font-size: 25px;">★ X-Сайт</div></b>
<br/>
Уважаемый <span style="color: #E77225; text-decoration: none;">'.$email.'</span>, вы заказали восстановление пароля.
<br/>
Так как у нас установлено шифрование паролей, мы не можем показать ваш старый пароль, поэтому специально для вас был сгенерирован новый.<br><br>
Ваш новый пароль - <b><span style="background: #2CADB3; color: #fff; text-decoration: none; padding: 0px 10px 0px 10px;">'.$mepas.'</span></b>
<br><br>
Воспользоваться им вы можете при входе на сайт, с Уважением администрация <a href="http://X-Сайт" style="color: #2CADB3; text-decoration: none;">X-Сайта</a>';
$headers="Content-Type: text/html; charset=utf-8n";
$headers.="From: почта support@elite-monitoring.ru";
mail($email, "Восстановление пароля", $mailtext, $headers); {
echo success("Вам отправлено письмо с паролем."); }
}
}
?>
<div class="row-fluid">
<div class="span12">
<form role="form" action="" method="POST">
<div class="form-group">
<label>Email адрес регистрации</label>
<input type="text" class="form-control span12" name="email">
</div>
<button type="submit" class="btn btn-primary" name="do_reset">Восстановить</button>
</form>
</div>
</div>
</div>
</div>
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;import cn.mpaike.interfaces.util.file.DigestUtil;
public class MD5 {
private MD5() {}
public final static String getMessageDigest(byte[] buffer) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
try {
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(buffer);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
return null;
}
}
public static void main(String[] args) {
Строковый ключ = "8798798da тестировать китайское шифрование";
System.out.println ("Строка для шифрования:" + ключ);
String signB = MD5.getMessageDigest(key.getBytes()).toUpperCase();
System.out.println ("Результат шифрования:" знак +);
}
}
Для того же метода шифрования результат выполнения в основном методе правильный, и неправильно запускать tomcat и вызывать его в действии.
Точно так же вывод ключа при выполнении tomcat точно такой же, но результат после завершения шифрования отличается от основного метода. (Настройки в файле и tomcat — utf8)
Наконец, его можно изменить только на
String sign="";
try {
sign = MD5.getMessageDigest(key.getBytes("UTF-8")).toUpperCase();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
После такой обработки консистенция сохранялась.
В проекте Android этот код снова правильный. , ,
Магическая проблема, причина действительно загадочная. , , Здесь отметка