[Resuelto] Crear Licencia en PHP

Iniciado por danny920825, 30 Marzo 2017, 15:48 PM

0 Miembros y 1 Visitante están viendo este tema.

danny920825

Hola a todos. Estoy haciendo un proyecto simple para un cliente pero me gustaría ponerle un sistema de expiración por ejemplo anual (porque no voy a tener acceso, sería local en la pc del cliente y solo me llamarían en caso de presentar algun problema y para renovar la licencia) . O sea, que a los 365 días el proyecto expire y no deje al usuario loguearse ni ver el contenido. He pensado en crear una session con el período de expiración y esas cosas, pero no se... si el usuario borra el historial se reiniciaría el contador. También pensé en crear un archivo de texto en el servidor donde establezco el límite de días y voy reescribiendo el contenido al comparar la fecha. Pero me gustaría escuchar otras ideas y si a alguien le gusta alguna de las que he pusto aqui, trabajar para hacerla lo más seguro posible ya que el objetivo es que el usuario no pueda cambiar los datos tan facilmente. Salu2
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

RevolucionVegana

Podrías hacer que el código haga un SELECT de una base de datos externa con una columna y fila de tipo boleana, una vez hecho el SELECT lo almacenas en una variable y metes todo el código en un IF que diga si la variable almacena el valor 1 que haga todo lo que tiene que hacer el código y si la variable almacena el valor 0 pues le muestras un mensaje diciendole que ya se ha terminado, pero de la forma que yo lo planteo serías tu quien al año entrarías y cambiarías el numerito de la base de datos por un 0, o usar fechas no se xD es que puede hacerse de cualquier forma eso sí tampoco es muy buena idea la mía porque si está desconectado de internet pues le daría un error y no le funcionaría nada del código, o si trabaja con una base de datos en el propio ordenador o en plan con un servidor local lo que puedes hacer es le pones una fila y columna con una fecha, y cada vez que se vaya a ejecutar el código la recoges y la comparas con la fecha actual y si todavía no ha llegado a esa fecha pues le dejas usar el código y si no pues ha expirado, se puede hacer de muchas formas, el problema sería que te modificasen el archivo xD

Saludos
HAS DICHO ALGO NENAAAAAA?!

engel lex

Podrías hacer que el núcleo esté cifrado (aes) llame a tu página de licencia y por https pase los datos de tu licencia, si es válida, le manda la clave de descifrado, y lo ejecutas en memoria
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

Pensaba que todos los métodos de cifrados usados en PHP eran en un solo sentido. No sabía que AES se pudiera descifrar. Lo de cifrar el nucleo a que se refiere? A cifrar TODA el proyecto? o alguna funcion especifica? Y como cargo el sitio en memoria?
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

CitarPensaba que todos los métodos de cifrados usados en PHP eran en un solo sentido

¿¿¿¿????

cifradom definición
CitarQue está escrito con letras, símbolos o números que solo pueden comprenderse si se dispone de la clave necesaria para descifrarlos.

si un cifrado no se puede descifrar, no es cifrado... creo que hablas de hash, que son de un solo sentido...

AES está hecho para descifrarse

lo de cifrar el nucreo me refiero a que agarras la parte importante de tu programa, lo cifras y guardas en un archivo, para usarlo, lo lees, lo abres con su contraseña y lo ejecutas


las funciones (conseguí unas en esta pagina... ojo necesitas el modulo de mcrypt)

Código (php) [Seleccionar]
function encriptar_AES($string, $key)
{
   $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
   $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_URANDOM );
   mcrypt_generic_init($td, $key, $iv);
   $encrypted_data_bin = mcrypt_generic($td, $string);
   mcrypt_generic_deinit($td);
   mcrypt_module_close($td);
   $encrypted_data_hex = bin2hex($iv).bin2hex($encrypted_data_bin);
   return $encrypted_data_hex;
}

function desencriptar_AES($encrypted_data_hex, $key)
{
   $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
   $iv_size_hex = mcrypt_enc_get_iv_size($td)*2;
   $iv = pack("H*", substr($encrypted_data_hex, 0, $iv_size_hex));
   $encrypted_data_bin = pack("H*", substr($encrypted_data_hex, $iv_size_hex));
   mcrypt_generic_init($td, $key, $iv);
   $decrypted = mdecrypt_generic($td, $encrypted_data_bin);
   mcrypt_generic_deinit($td);
   mcrypt_module_close($td);
   return $decrypted;
}


para correrlo, depende de como lo almacenes
Código (php) [Seleccionar]
$codigo = 'for($i=0;$i<10;$i++){
 echo "contar $i\n";
}
';
eval($codigo);






ahora que lo pienso... podrías transferir en lugar de una contraseña de descifrado, el modulo directamente y ejecutarlo XD
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

Primero que todo:
Gracias por la diferencia entre cifrar y hash
Luego gracias por el trabajo de buscar las funciones. No soy muy bueno todavía como para entender ese código, pero me llevo una idea. Seria:
Mientras que la licencia sea válida: ejecuta la funcion eval() con el programa dentro. Si no, muestra un error de licencia y termina el programa.
Como decía al inicio del post, estaba dispuesto a escuchar sobre mejoras a mi idea, ya que mi idea era cuando más un archivo txt en el servidor que tuviera la fecha de la ultima ejecucion y un numero a descontar. Si la fecha actual era mayor que la fecha de caducidad, entonces restaba tantos numeros como diferencia hubiera.
Pero ese método es mucho más efectivo. Gracias Engel Lex por la ayuda como siempre. Tema Solucionado parcialmente hasta que encuentre la forma de hacerlo por mi mismo, pero pueden cerrarlo. Ahora mismo lo marco como resuelto
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

para evitarte tanto problema podrías hacerlo por mi ultima forma pensada XD


tu creas tu web con una sección que reciba post, si recibe el usuario y la contraseña y la fecha es valida, retornará la sección de codigo que haga alguna función principal (procura que sea pequeña, menos de 100 lineas para que sea rapida la transferencia)

en el programa, si la sesión es valida, llama a tu pagina mandando los datos necesarios, t si es valida, guarda el codigo en una variable de sesión y lo "carga en memoria" (con eval a la veriable) cuando lo necesite
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

OK, Cuando tenga la respuesta confeccionada regreso y la posteo. Gracias por la ayuda
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno