PHP100的视频中有讲验证码的,处于对技术的热爱,今天花几个小时研究了一下验证码的安全与破解。
破解肯定是学不会的,不过有助于我们知道什么样的验证码在机器面前是安全的。
简单的4个数字横向排列肯定是最不安全的。
总结一下,安全验证码的几个要点(中文虽然安全系数高,但是输入麻烦,暂时不计算在内)。
1.背景颜色斑斓,不单色,被计算机抽出的可能性小;
2.每个字体大小、字体名、文字位置、文字颜色随机不固定;
3.字符类型不单一,字母、字符、数字等交替。
4.字符随机重叠或者不叠,机器不易抽出。
根据自己的总结和学习,设计了下面的超级验证码的程序,下面是几个相关的截图。





点击下面查看改良后的代码:
<?php
/*
 * Created on 2010-10-25
 * BY��QQ542900563
 * Copyrights Reserved 2000-2020
 */
 //生成图床
 $img2=imagecreatetruecolor(100,30);
 $img=imagecreatefromjpeg("c.jpg");//载入背景图片
 $size=getimagesize("c.jpg");
  //print_r($size);
//通过随机背景的坐标随机背景
 imagecopy($img2,$img,0,0,rand(1,($size[0]-100)),rand(1,($size[1]-30)),100,30);
 //写进字符串
  $sess="";
  $W_pos=rand(0,20);//随机X位置
  $H_pos=rand(24,34);//随机Y位置
 for ($i = 0; $$i < 4; $$i++) {
  	$bgfont=imagecolorallocate($img2,rand(0,255),rand(0,255),rand(0,255));//随机颜色
	$rand=dechex(rand(1,15));//随机字符
    $sess.=$rand;            //记录字符
    $W_pos+=rand(5,20);      //随机位置,保证后一个产生的字符打出位置在前一个字符后面而且间距不定
    //由于字体比较多,这里不再随机
    //有经验的通知可以做成数组,随机取数组的值就可以随机字体了
    //倾斜角度可以自己定义随机
    imagettftext ( $img2, 30, rand(10,50), $W_pos, $H_pos, $bgfont, "simhei.ttf", $rand );
 }
session_start();
$_SESSION[name]=$sess;
header("Content-type:image/jpeg");
imagejpeg($img2);
?>
                    
                
                
            
        
浙公网安备 33010602011771号