• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
王小白 博客
web编程...点点滴滴! 我是一只小菜鸟,但是可以飞的很高!
博客园    首页    新随笔    联系   管理    订阅  订阅
【PHP】 【PHP100改进系列】超级验证码的生成

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);

?>

posted on 2010-10-27 15:23  王小白  阅读(582)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3