Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
pixel
18 / 11 / 4
Регистрация: 19.05.2009
Сообщений: 1,663
#1

Генератор пароля - PHP

27.10.2011, 08:29. Просмотров 2033. Ответов 15
Метки нет (Все метки)

Приветствую.
Решил тут написать функцию сабжа, но что то хлам какой то неработоспособный получается:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function TestRandStr($num = 8)
    {
    $a1 = array(range(0, 9));
    $a2 = array(range('A', 'Z'));  
    $a3 = array(range('a', 'z'));
    $key = '';
    $id = 0;
    $last_id=0;
    $rand = microtime(true);
    for($i = 0; $i < $num; $i++)   
        {
          $id = rand(1, 3);
           if ($id==$last_id)
           {
           while ($id==$last_id) $id = rand(1, 3);
              $last_id=$id;
              switch ($id)
              {
              case 1:
              $key .= $a1[(round(($rand * 1000 - floor($rand * 1000)),2) * 100 )];
              $rand = microtime(true); 
              break;
              case 2:
              $key .= $a2[(round(($rand * 1000 - floor($rand * 1000)),2) * 100 )];
              $rand = microtime(true); 
              break;
              case 3:
              $key .= $a3[(round(($rand * 1000 - floor($rand * 1000)),2) * 100 )];
              $rand = microtime(true); 
              break;
              }           
           }
           else
           {
              $last_id=$id;
              switch ($id)
              {
              case 1:
              $key .= $a1[(round(($rand * 1000 - floor($rand * 1000)),2) * 100 )];
              $rand = microtime(true); 
              break;
              case 2:
              $key .= $a2[(round(($rand * 1000 - floor($rand * 1000)),2) * 100 )];
              $rand = microtime(true); 
              break;
              case 3:
              $key .= $a3[(round(($rand * 1000 - floor($rand * 1000)),2) * 100 )];
              $rand = microtime(true); 
              break;
              }
           }
        }
         return $key;  
    }
т.е. нужно сгенерить пароль из 8 символов, но что бы подряд однотипные символы не ставились. Например X0x0 - правильно а X00x - не правильно. Вывод либо вообше не происходит, либо выводится слово Array. Код получается очень громоздкий. Может есть более элегантный вариант?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2011, 08:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Генератор пароля (PHP):

Генератор пароля (случайной строки)
&lt;?php function genpsw() { $rp = array ( '1', '2', '3', '4', '5', '6',...

генератор ключей
как сделать код чтобы он генерировал рандомные ключи , чтобы получалось чтото...

Генератор тестов
Всем привет! В силу обстоятельств пытаюсь сделать генератор тестов на php,...

Генератор имён
http://www.cyberforum.ru/php-beginners/thread1705961.html А как сделать чтобы...

Генератор URL
Друзья дайте совет. Есть более 2000 *.doc файлов которые лежат на веб сервере...

Генератор страниц
Ребят помогите написать код где: 1) При нажатии на кнопку будет генерироваться...

15
planod
48 / 48 / 2
Регистрация: 25.05.2011
Сообщений: 277
27.10.2011, 09:27 #2
http://www.softtime.ru/scripts/parol.php
0
pixel
18 / 11 / 4
Регистрация: 19.05.2009
Сообщений: 1,663
27.10.2011, 10:05  [ТС] #3
спасибо за ссылку но это не то. вот пароль который он сгенерил - &.?jsZv)&2 j и s в нижнем регистре. Мне нужно сделать что бы шло чередование - Большая буква, маленькая буква, цифра и т.д. Но это не значит что повторение строгое может быть Большая буква, маленькая буква, цифра, маленькая буква, цифра, большая буква и т.д.
0
planod
48 / 48 / 2
Регистрация: 25.05.2011
Сообщений: 277
27.10.2011, 13:33 #4
Переделал....может так подойдет:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  echo generate_password(10);
 
  function generate_password($number)
  {
    $arr = array('a','b','c','d','e','f',
                 'g','h','i','j','k','l',
                 'm','n','o','p','r','s',
                 't','u','v','x','y','z',    
                 '1','2','3','4','5','6',
                 '7','8','9','0');
    // Генерируем пароль
    $pass = "";
    for($i = 0; $i < $number; $i++)
    {
      // Вычисляем случайный индекс массива
      $index = rand(0, count($arr) - 1);
      if ($index%2 == 0)
      {
          $pass .= strtolower($arr[$index]);
      } else
      {
          $pass .= strtoupper($arr[$index]);
      }
      
    }
    return $pass."<br>";
  }
1
pixel
18 / 11 / 4
Регистрация: 19.05.2009
Сообщений: 1,663
27.10.2011, 21:09  [ТС] #5
спасибо за код, но для того что бы он выполнял то что мне нужно вместо
PHP
1
if ($index%2 == 0)
нужно поставить
PHP
1
if ($i%2 == 0)
Добавлено через 3 часа 31 минуту
Позже. Хотя тоже есть проблемы - иногда появляются две цифры подряд
0
YVSIK
26 / 26 / 3
Регистрация: 03.04.2010
Сообщений: 206
27.10.2011, 21:15 #6
вообще зачем такой большой код то ? всё уже давненько придумано
почитай книжку Кузнецова и Семирядцева(кажется так авторов зовут)
берешь любой набор знаков и обрабатываешь их md5 потом обрезаешь на нужную дллину
все !!
0
pixel
18 / 11 / 4
Регистрация: 19.05.2009
Сообщений: 1,663
27.10.2011, 21:22  [ТС] #7
громоздкость кода при генерации пароля, который нужен только при регистрации не важна. важна функциональность.
0
planod
48 / 48 / 2
Регистрация: 25.05.2011
Сообщений: 277
28.10.2011, 08:38 #8
YVSIK, Код взят как раз из этой книги) только ТС надо, чтобы не было подряд двух заглавных или маленьких букв.
0
KarfaX
33 / 33 / 12
Регистрация: 18.05.2010
Сообщений: 99
28.10.2011, 15:18 #9
Если на сервере установлена утилита pwgen, то пароль легко сгенерировать с её помощью:
PHP
1
2
exec('pwgen 7', $pwd);
echo array_pop($pwd);
,

где 7 -- длина пароля.
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
28.10.2011, 18:50 #10
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function PassGen($len) {
    $len = (int)$len;
    $Chars = array(
        'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
        'abcdefghijklmnopqrstuvwxyz',
        '0123456789',
        '`~!@#$%^&*()-_=+[]{};:\'"\\|/?,.<>',
    );
    $MaxType = count($Chars) - 1;
    $result = '';
    for ($i = 0; $i < $len; $i++) {
        $type = mt_rand($i ? 1 : 0, $MaxType);
        $t = $Chars[$type];
        if ($type) {
            unset($Chars[$type]);
            array_unshift($Chars, $t);
        }
        $result .= $t[mt_rand(0, strlen($t) - 1)];
    }
    return $result;
}
1
pixel
18 / 11 / 4
Регистрация: 19.05.2009
Сообщений: 1,663
28.10.2011, 19:45  [ТС] #11
подскажите а почему у меня может не работать escapeString? Пробую проверить в БД наличие логина по следующей схеме:
PHP
1
2
3
$query2="SELECT COUNT(*) FROM `users` WHERE `login` = '".escapeString($Login)."'";
echo '<br />'.$query2;
$res = mysql_query($query2) or die (mysql_error());
если escapeString оставить - echo не срабатывает, а если убрать, то срабатывает - значит что то именно с escapeString - как же мне тогда загонять в БД логин?
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
28.10.2011, 20:04 #12
Что еще за escapeString() ? Используйте mysql_real_escape_string()
1
pixel
18 / 11 / 4
Регистрация: 19.05.2009
Сообщений: 1,663
29.10.2011, 16:57  [ТС] #13
т.е. использование mysql_real_escape_string() 100% избавит от SQL-инъекций?
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
30.10.2011, 06:29 #14
Цитата Сообщение от pixel Посмотреть сообщение
т.е. использование mysql_real_escape_string() 100% избавит от SQL-инъекций?
Да, если правильно применять.
0
pixel
18 / 11 / 4
Регистрация: 19.05.2009
Сообщений: 1,663
30.10.2011, 09:28  [ТС] #15
блин, опять условности. вот так я правильно применяю?
SQL
1
2
$query2 = "SELECT COUNT(*) FROM `".DBPREFIX."users` WHERE `login`='".mysql_real_escape_string($Login)."' and `password`='".
     md5(mysql_real_escape_string($Password).SALT)."'";
0
Vovan-VE
13148 / 6531 / 1038
Регистрация: 10.01.2008
Сообщений: 15,071
30.10.2011, 09:48 #16
Цитата Сообщение от pixel Посмотреть сообщение
блин, опять условности. вот так я правильно применяю?
Да, все правильно. Условности в другом заключаются. Данная функция также полагается на кодировку соединения, установленную через mysql_set_charset(). Также mysql_real_escape_string() может работать только при установленном соединении с MySQL сервером. Если соединения еще не было установлено, то оно будет установлено принудительно: неявный вызов mysql_connect() без параметров - т.е. вызов с какими-то левыми дефолтными логином и паролем, что ничем хорошим уж точно Вам не сулит.
1
30.10.2011, 09:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2011, 09:48
Привет! Вот еще темы с решениями:

Генератор ссылок
Есть функция которая генерирует таблицы, на странице будет около 100 таких...

Генератор стишков
Написл простенький скрипт для сайта. Все работает но есть одно но, первая и...

Генератор Sitemap
Добрый вечер. Кто знает класс для правильного создания sitemap файла....

генератор чисел
Добрый вечер, как генерировать ключ(цифр) из матрицы Вот пример ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru