在php**開發中,驗證碼可以有效地保護我們的表單不被惡意提交,但是如果不使用算式驗證碼或者漢字驗證碼,僅僅使用簡單的字母或者數字驗證碼,這樣的驗證碼方案真的安全嗎?
大家知道簡單數字或者字母驗證碼很容易被破解,但是算式驗證碼或者中文漢字驗證碼不容易被破解,所以建議大家在使用驗證碼的時候,盡量用算式驗證碼或者中文漢字驗證碼。
1.算式驗證碼:
<?php2.中文漢字驗證碼:session_start();
header("content-type: image/png");
$num1 = mt_rand(0,9);//第一位數
$num2 = mt_rand(1,9);//第二位數
$type_str = "+-*";//方法字串集合
$type = substr($type_str,rand(0,2),1);//隨機方法
$change = mt_rand(1,3);
if($change==1)elseif($change==2)elseif($change==3)
$im = imagecreate(68,28);
$black = imagecolorallocate($im, 0,0,0);
$white = imagecolorallocate($im, 255,255,255);
$gray = imagecolorallocate($im, 200,200,200);
$red = imagecolorallocate($im, 255, 0, 0);
imagefill($im,0,0,$white);
imagestring($im, 5, 10, 8, $code, $black);
for($i=0;$i<70;$i++)
imagepng($im);
imagedestroy($im);
?>
<?phpsession_start();
$len = mb_strlen($ch_str,"utf-8");//漢字長度
$str = array();
for($i=0;$i<4;$i++)
$authnum_session = implode("",$str);
$_session['authnum_session'] = $authnum_session; //記錄到session
header("content-type: image/png");
//的長和高
$image_x=100;
$image_y=50;
$im = imagecreate($image_x,$image_y);
//這裡取底色為白色
$bkg = imagecolorallocate($im,255,255,255);
//顯示的字型樣式,這個要把檔案放到對應的目錄中,如果你沒有檔案就去window的字型檔案中找乙個吧。
$fnt = "simhei.ttf";
//為影象分配一些顏色
$white=imagecolorallocate($im,234,185,95);
//在上畫橢圓弧,指定下座標點
imagearc($im, 150, 8, 20, 20, 75, 170, $white);
imagearc($im, 180, 7,50, 30, 75, 175, $white);
//在上畫一條線段,指定下座標點
imageline($im,20,20,180,30,$white);
imageline($im,20,18,170,50,$white);
imageline($im,25,50,80,50,$white);
//亂點的數量
$noise_num=3000;
$line_num=50;
//各種混亂字元的顏色
$rectangle_color=imagecolorallocate($im,0xaa,0xaa,0xaa);
$noise_color=imagecolorallocate($im,0x00,0x00,0x00);
$font_color=imagecolorallocate($im,0x00,0x00,0x00);
for($i=0;$i<$noise_num;$i++)
for($i=0;$i<$line_num;$i++)
for ($i=0;$i<4;$i++)
imagepng($im);
imagedestroy($im);
?>
注意:
中文漢字驗證碼單獨執行,然後獲取session會發現驗證碼和session內容不一致。但是在img 標籤中src屬性中引用這個中文漢字驗證碼檔案時,然後獲取session,這時兩者內容時一致的。
漢字驗證碼演算法
例如 好 字的十六進製制區位碼是ba c3,前兩位是區域,後兩位代表位置,ba處在第26區,好 處在此 區漢字的第35位也就是c3位置,所以數字 就是2635。這就是gb2312漢字區位原理。根據 漢字區位碼表 我們可以發現 第15區也就是af區以前都沒有漢字,只有少量符號,漢字都從第16區b0開始...
php驗證碼zhuc php實現驗證碼製作
php實現驗證碼製作 首先,看一張圖了解驗證碼生成的過程。1 生成驗證碼底圖 2 驗證碼內容 3 生成驗證碼 4 對比校驗 驗證碼實現的核心技術分析 a 底圖的 實現,並新增干擾元素 b 生成驗證內容 c 驗證內容儲存在服務端 d 驗證內容的校驗 下面看 實現的過程 這段 實現了產生 隨機數字,隨機...
驗證碼 簡單驗證碼識別
這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 興之所至之所以說簡單,我覺得是這樣的 抽了五張驗證碼扔進ps,50 透明度,長這樣 只有數字為內容 每張圖的數字都在固定位置 沒有太大的干擾因素 數字字型,形態完...