2009-12-31 15:07
php版密码字典生成[原创]
现在越来越发现高数的重要了.高数中的排列与组合正是密码字典生成的原理,当初要是把高数学好了.把它们的推理过程搞明白了.现在一定写的东西更高效!
ini_set('max_execution_time','0');
ini_set('memory_limit','512M');
function make_book($n){
$tempArr = array();//字典数组
$source='abc';
$len=strlen($source);//得到源字串的长度
$count=1;
for($i=0;$i
$count*=$len;//总词数等于源字串长度的n次方,奶奶的,php没有幂运算。
$series[]=0;
}
for($i=0;$i
$word='';//词初始化为空字符串
$tonext_value=1;//小循环前设好给末位进位
for($no=$n-1;$no>=0;$no--){//循环遍历数组每次从源字串中取一个字符,为便于进位运算,取字符是从后往前取
$word=$source{$series[$no]}.$word; //先取出一个字符
$series[$no]+=$tonext_value;
if($no>0){
if($series[$no]==$len){
$series[$no]=0;
$tonext_value=1;
}else{
$tonext_value=0;
}
}
}
$tempArr[] = "$word ";
}
return $tempArr;
}
echo '
';
print_r(make_book(4));
真吓人.
一个4位的密码,我将如下就能猜到你的密码
如果全是数字的话:10,000次 echo pow(10, 4);
如果是a-z字符的话:456,976次echo pow(26, 4);
如果是a-z,A-Z的话:7,311,616次echo pow(52, 4);
如果是字符(52),数字(10),特殊符号(按20个符号)组合:45,212,176次echo pow(82, 4);
可以用它来生成域名的所有可能.然后看看哪个域名没有注册.呵呵.
@set_time_limit(0);
include_once('com_1.php');
$temp = array_chunk($a, 500);unset($a);//echo '
';print_r($temp);exit;
$j = count($temp);
for($i=0;$i
foreach($temp[$i] as $value){
$value = $value.'.net';
$cmd = "echo `whois -r $value`";
exec($cmd,$out);
if(!strpos($out[0],'No match for')){
//$s = "{$value}已注册";
continue;
}else{
$s = "{$value}未注册";
}
$cmd = "echo $s >> /var/www/xing/out";
exec($cmd);
}
}
php实现排列组合中的全排列,并实现简单的密码字典生成
$arr=str_split($arrStr);
$strMin=1;
$strMax=2;
$results=array();
//makeDic('',$arr,$strMin,0,$results);
for($i=$strMin;$i<=$strMax;$i++){
makeDic('',$arr,$i,0,$results);
print_r($results);
unset($results);
} function makeDic($strFirst,$arr,$strMin,$tmp,&$results = array()){
$len=count($arr);
for($i=0;$i
if($tmp==($strMin-1)){
// echo $strFirst.$arr[$i]."\n\r
";
$results[]=$strFirst.$arr[$i];
} else {
$tmpResult=$strFirst.$arr[$i];
$tmp+=1;
// echo $tmpResult."\n\r
".$tmp."\n\r
";
makeDic($tmpResult, $arr,$strMin,$tmp, $results);
$tmp-=1;
// echo $tmp."\n\r
";
}
}
}?>