Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Генератор паролей
 
 автор: cheops   (15.10.2005 в 03:29)   письмо автору
 
 

Изменён скрипт генератора паролей в разделе "Примеры на PHP" - теперь применяется скрипт для генерации более защищённого пароля http://www.softtime.ru/scripts/parol.php

   
 
 автор: fabik   (15.10.2005 в 23:22)   письмо автору
 
   для: cheops   (15.10.2005 в 03:29)
 

А почему бы не :) в принцепе дописать до спец симвалов можно легко...

<?php
function passwg($size) {
$hash = md5 (uniqid(time()));
$res_hash = substr($hash,0,$size);
return $res_hash;
}
?>
вызов:
<?php
echo "".passwg(12)."";
?>

   
 
 автор: Atom   (15.10.2005 в 23:30)   письмо автору
 
   для: fabik   (15.10.2005 в 23:22)
 

И где в вашем коде спец-символы?

   
 
 автор: JIEXA   (16.10.2005 в 09:29)   письмо автору
 
   для: Atom   (15.10.2005 в 23:30)
 

Вот приведу две функуции

Генератор паролей
<?
function GenPass($tolen,$numlen=3) {
    if (
$tolen<5||$numlen>=$tolen) return false;
    if (
$numlen>9$numlen=9;
    
$len=$tolen-$numlen;
    
$vv="aeiouy"// гласные
    
$cs="bcdfghjklmnpqrstvwxz"// согласные
    
$res='';
    for(
$i=0;$i<floor($len 2);$i++){
        
$res.=$cs[rand(0,strlen($cs)-1)].$vv[rand(0,strlen($vv)-1)];
    }
    if (
floor($len/2)<$len/2$res.=$cs[rand(0,strlen($cs)-1)];
    
$num=substr(rand(100000000,999999999),0,$numlen);
    
$res.=$num;
    return 
$res;
}
?>



Проверка, хороший пароль или нет

<?php
/*
* bool CheckPass(string password)
* TRUE - Пароль прошёл проверку
* FALSE - Не прошёл
*/
function CheckPass($p) {
    
$p=trim($p);
    
$len=strlen($p);
    
$chars='1234567890qwertyuiopasdfghjklzxcvbn mQWERTYUIOPASDFGHJKLZXCVBNM';

    if(
$len 6) return FALSE;
    if(
strpos($chars$p) !== false) return FALSE;
    if(
$len/== round($len/2)) {
        
$p1=substr($p,0,$len/2);
        
$p2=substr($p,$len/2);
        
$p22='';
        for(
$i=strlen($p2)-1$i>=0$i--)
            
$p22.=$p2[$i];
        if(
$p1 == $p2 and strpos($chars$p1) and strpos($chars$p2)) return FALSE;
        if(
$p1 == $p22 and strpos($chars$p1) and strpos($chars$p2)) return FALSE;
    }

    
$chars=array();
    for(
$i=0$i<$len$i++) {
        if(isSet(
$chars[$p[$i]]))
            
$chars[$p[$i]]++;
        else
            
$chars[$p[$i]]=1;
    }
    
// Считаем процент уникальности символов
    
$k=sizeof($chars) / $len 100;
    if(
$k 46) return FALSE;

    return 
TRUE;
}
?>
Пароли которые функция считает плохими:
1. Длинна < 6 символов
2. Последовательность символов как на клавиатуре (123456, qwerty)
3. Повторные комбинации последовательности символов (werwer, 12341234)
4. "Отражённые" последовательности символов (123321, qweewq)
5. Процент уникальности символов меньше 46 (wwwfff, 000000)

   
 
 автор: Саня_   (16.10.2005 в 21:22)
 
   для: cheops   (15.10.2005 в 03:29)
 

Когда-то давно я предлагал неплохой скрипт на этом форуме. Напишу его ещё раз:
<?php
function passgen ($length) {
       
$result "";
       
srand(microtime()*23456);
       for(
$i 1$i <= $length$i++) {
              
$rnd rand(33126);
              
$result .= chr($rnd);
       }
       return (
$result);
?>

   
 
 автор: cheops   (17.10.2005 в 01:10)   письмо автору
 
   для: Саня_   (16.10.2005 в 21:22)
 

ага, я вот тоже что-то такое хотел сначала сделать, только меня смутило то, что спец-символы сложно удалять, особенно если пароль будет применяться в качестве пароля к учётной записи - неплохо бы было наиболее вопиющие удалить. Хм... но наверное его нужно выложить туда же как вариант.

   
 
 автор: Саня_   (17.10.2005 в 16:08)
 
   для: cheops   (17.10.2005 в 01:10)
 

Ничего сложного с вопиющими символами нету:
<?php 
function passgen ($length) { 
       
$result ""
       
srand(microtime()*23456); 
       for(
$i 1$i <= $length$i++) { 
              
$rnd rand(33126); 
              
$result .= chr($rnd); 
       }
       
$spec = array("\'"'\"'"\\""\.");
       
$replace = array("g""6""G""f");
       
$result  str_replace($spec$replace$result); 
       return (
$result); 
}
?>

   
 
 автор: Саня_   (17.10.2005 в 16:25)
 
   для: cheops   (17.10.2005 в 01:10)
 

Вот ещё проще:
<?php
function passgen ($length) {
       
$result "";
       
srand(microtime()*23456);
       for(
$i 1$i <= $length$i++) {
              
$rnd rand(33126);
              
$spec = array(34394692);
              if(
in_array($rnd$spec)) $i--; else $result .= chr($rnd);
       }
       return (
$result);
}
?>

Где $speс - массив ASCII-значений забаненных символов.
Можно добавить ord("запрещённый символ") в качестве элемента массива.

   
 
 автор: DmSh   (24.10.2005 в 14:14)
 
   для: Саня_   (17.10.2005 в 16:25)
 


<?

echo crypt(mktime(), rand());

?>

   
 
 автор: ZC   (20.12.2005 в 13:51)   письмо автору
 
   для: Саня_   (16.10.2005 в 21:22)
 

А откуда вы этот скрипт взяли, не из журнала ли?

   
 
 автор: Саня   (20.12.2005 в 14:00)   письмо автору
 
   для: ZC   (20.12.2005 в 13:51)
 

Да, из журнала.
Правда я этот скрипт немного подредактировал.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования