elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Creación de un Captcha desde 0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Creación de un Captcha desde 0  (Leído 2,225 veces)
Mad Antrax
Colaborador
***
Desconectado Desconectado

Mensajes: 2.164


Cheats y Trainers para todos!


Ver Perfil WWW
Creación de un Captcha desde 0
« en: 20 Noviembre 2006, 07:20 am »

Hola, estoy intentando crear un Captcha para integrarlo en varios proyectos. La base ya esta creada, tengo el script que me genera una imagen completamente aleatoria, mi pregunta es: ¿Como hago para que el script genere una imagen apartir de una variable aleatoria y ésta sea comprobada através de un formulario?

Os dejo el código escrito y un zip preparado:

Código:
<?php
header("Content-type: image/png");

$im = imagecreatetruecolor(200, 50);
$bg = imagecolorallocate($im, mt_rand(175,255), mt_rand(175,255), mt_rand(175,255));
imagefilledrectangle($im, 0, 0, 199, 49, $bg);

$texto = array("0","1","2","3","4","5","6","7","8","9","a","b","c","x","y","z");
$fonts = array("bauhs93.ttf","bernhc.ttf","bradhitc.ttf","castelar.ttf","comic.ttf","couri.ttf","goudysto.ttf","impact.ttf","tahoma.ttf","verdana.ttf");

$reg = 200 / 7;
$rog = 50 / 4;
$rag = 200 / 6;

for ($i = 1; $i <= 6; $i++) {

//ESCRIBE TEXTO//

$t_color = imagecolorallocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100));
imagettftext($im, mt_rand(20,30), mt_rand(-20,20), mt_rand(($reg * $i)-3,($reg * $i)+3)-10, mt_rand(30,40), $t_color, $fonts[mt_rand(0,9)], $texto[mt_rand(0,15)]);
}

for ($i = 1; $i <= 3; $i++) {

//LINEAS HORIZONTALES//

$hl_color = imagecolorallocate($im, mt_rand(150,255), mt_rand(150,255), mt_rand(150,255));

$var = mt_rand(-5,5);

imageline($im,0,$rog * $i,200,$rog * $i + $var,$hl_color);

}

for ($i = 1; $i <= 5; $i++) {

//LINEAS VERTICALES//

$hl_color = imagecolorallocate($im, mt_rand(150,255), mt_rand(150,255), mt_rand(150,255));

$var = mt_rand(-3,3);

imageline($im,$rag * $i,0,$rag * $i + $var,50,$hl_color);

}


for ($i = 1; $i <= 50; $i++) {

//CRUCES//

$tmp = mt_rand(1,50);

$color1 = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
$color2 = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
$color3 = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
$color4 = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
$color5 = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
$color6 = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
$color7 = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
$color8 = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
$color9 = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));

imagesetpixel($im,$i*4,$tmp,$color1);
imagesetpixel($im,$i*4+1,$tmp+1,$color2);
imagesetpixel($im,$i*4+2,$tmp+2,$color3);
imagesetpixel($im,$i*4+1,$tmp-1,$color4);
imagesetpixel($im,$i*4+2,$tmp-2,$color5);
imagesetpixel($im,$i*4-1,$tmp+1,$color6);
imagesetpixel($im,$i*4-2,$tmp+2,$color7);
imagesetpixel($im,$i*4-1,$tmp-1,$color8);
imagesetpixel($im,$i*4-2,$tmp-2,$color9);
}

$borde = imagecolorallocate($im, mt_rand(0,150), mt_rand(0,150), mt_rand(0,150));
imagerectangle($im,0,0,199,49,$borde);
imagerectangle($im,1,1,198,48,$borde);
imagepng($im);
?>

Aprobecho tambien para preguntar si las imagenes generadas son faciles o dificiles para ser interpretadas por un programa.

Se que hay cosas por mejorar:

1) Meter un config.php como include para poner variables globales
2) Hacer una matriz de colores para no usar tanto imagecolorallocate
3) Mejoras en general


En línea

No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
Ertai
Colaborador
***
Desconectado Desconectado

Mensajes: 2.025


Ralph Wiggum


Ver Perfil
Re: Creación de un Captcha desde 0
« Respuesta #1 en: 20 Noviembre 2006, 20:11 pm »

Pues no esta nada mal!  :D

Yo creo que el nivel de complejidad de la foto es bueno, contando que no hace casi imposible la lectura para el usuario (hay algunos captchas que son todo un puzzle).

Respeto a tu pregunta, ten en cuenta que tu tienes un array con las letras y números que usaras.

Código:
<?php
array("0","1","2","3","4","5","6","7","8","9","a","b","c","x","y","z");
?>

Pues en vez de hacer un rand a pelo, haz ese rand y guardala en una variable. Concatena todos los carácteres y números que usas, de tal manera que de la palabra deseada, pasale un md5 y guardalo en $_SESSION['var'].

Luego, cuando recibas el formulario, compruebas la validez con la variable de sesión  ;)

Saludos y suerte!


En línea

Si la felicidad se comprara, entonces el dinero sería noble.

Código:
void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}
sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Creación de un Captcha desde 0
« Respuesta #2 en: 21 Noviembre 2006, 01:07 am »

:P yo tengo este:
Código:
<?php
// archivos necesarios:
// t,gif
// LCALLIG.ttf
// l_10646.ttf
// MTCORSVA.ttf
// bauh.ttf
session_start();

if(!isset($_GET['image']) && isset($_REQUEST['c'],$_SESSION['capcha'])){
if($_REQUEST['c']==join($_SESSION['capcha'],'')){
unset($_SESSION['capcha']);
$_SESSION['capcha']=null;
unset($_SESSION['capcha']);
// HACER ESTO, CUANDO CONFIRME QUE ERES HUMANO!
echo "SI eres humano!";
}else{
// HACER ESTO, CUANDO VI QUE TE EQUIVOCASTE
echo "Te ekivocaste<br>";
}
}

if(!isset($_GET['image'])){
?>
<img src='?image'>
<form method=POST>
Mete las letras de arriba.
<input name=c value="" size=10 type=text>
<input type=submit>
</form>
<?php
exit;
}

/*
$image = ImageCreateFromGIF("t.gif");
COLOR = ImageColorAllocate($image, 255, 255, 255);
imageLine($image, INICIO_X, INICIO_Y, FIN_X, FIN_Y, COLOR);
ImageTTFText($image, TAMAÑO, ANGULO, INICIO_X, INICIO_Y, COLOR, FUENTE, TEXTO);
Header("Content-Type: image/Png");
imagePng($image);
ImageDestroy($image);
*/


$image = ImageCreateFromGIF("t.gif");
$FUENTE[]="LCALLIG.TTF";
$FUENTE[]="l_10646.ttf";
$FUENTE[]="MTCORSVA.TTF";
$FUENTE[]="LCALLIG.TTF";
$FUENTE[]="bauh.TTF";
$FUENTE[]="l_10646.ttf";
$FUENTE[]="MTCORSVA.TTF";
$FUENTE[]="MTCORSVA.TTF";
$FUENTE[]="bauh.TTF";
$FUENTE[]="bauh.TTF";
$FUENTE[]="LCALLIG.TTF";
$FUENTE[]="l_10646.ttf";
$FUENTE[]="bauh.TTF";
$FUENTE[]="LCALLIG.TTF";
$FUENTE[]="l_10646.ttf";
$FUENTE[]="MTCORSVA.TTF";

for ($i=0;$i<15+rand()%15;$i++){
$COLOR = ImageColorAllocate($image, rand()%255, rand()%255, rand()%255);
imageLine($image, rand()%500, rand()%500, rand()%500, rand()%500, $COLOR);
}
for ($i=0;$i<5;$i++){
$COLOR = ImageColorAllocate($image, rand()%200, rand()%200, rand()%200);
$x[$i]=chr(97+rand()%25);
imageLine($image, rand()%500, rand()%700-200, rand()%500, rand()%500, $COLOR);
ImageTTFText($image, 35+rand()%15, 310+rand()%100, 25+$i*100, rand()%150+50, $COLOR, $FUENTE[8+(rand()*rand())%8], $x[$i]);
imageLine($image, rand()%500, rand()%500, rand()%500, rand()%500, $COLOR);
}
/*for ($i=0;$i<5;$i++){
$COLOR = ImageColorAllocate($image, rand()%200, rand()%200, rand()%200);
$x[5+$i]=chr(97+rand()%25);
imageLine($image, rand()%700-200, rand()%500, rand()%500, rand()%500, $COLOR);
ImageTTFText($image, 35+rand()%15, 310+rand()%100, 25+$i*100, rand()%150+250, $COLOR, $FUENTE[(rand()*rand())%8], $x[5+$i]);
imageLine($image, rand()%500, rand()%500, rand()%500, rand()%500, $COLOR);
}*/
for ($i=0;$i<20+rand()%15;$i++){
$COLOR = ImageColorAllocate($image, rand()%255, rand()%255, rand()%255);
imageLine($image, rand()%600-100, rand()%700-200, rand()%500, rand()%500, $COLOR);
}
$_SESSION['capcha']=$x;
Header("Content-Type: image/JPEG;filename: cha.jpg");
imageJpeg($image);
ImageDestroy($image);
?>

anexo t.gif

las fuentes, pueden usar las que quieran :P
En línea

dragondeluz

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Creación de un Captcha desde 0
« Respuesta #3 en: 8 Diciembre 2006, 00:09 am »

Hola muchachos, hace tiempo estaba buscando algo asi para un portal web, pero esto me parece genial.

Sirdarckcat, este codigo que enviaste , no se si sera que no habre entendio bien como funciona pero yo copie las fuentes y el gif  a la carpeta donde este el file.php, lo ejecuto pero no me genera la imagen... alguna idea de que pued epasar o es que no entendi bien como es esto?.

Gracias
En línea

sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Creación de un Captcha desde 0
« Respuesta #4 en: 9 Diciembre 2006, 01:09 am »

tienes la libreria GD?

www.php.net/GD

Saludos!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con creacion de blog desde 0.
Desarrollo Web
calvin2sr 5 2,238 Último mensaje 4 Enero 2013, 15:48 pm
por EFEX
creacion de thread en linux desde c
GNU/Linux
JAHVEM13 0 1,571 Último mensaje 15 Octubre 2013, 23:06 pm
por JAHVEM13
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines