En días recientes me encontré con la necesidad de crear una aplicación donde todos los datos deberían estar encriptados dentro de la Base de Datos, bueno casi todos, pues los campos de las llaves no los encripte, por razones lógicas. La aplicación mencionada tenia que ser desarrollada con PHP+Oracle, a continuación el detalle de la solución final a la que llegue.
Lo primero con lo que me enfrente fue con la búsqueda de una función para encriptar desde PHP, por razones de comodidad decidí bajar una clase de www.phpclasses.org
Había otras opciones como la de usar alguna función de mcrypt o crypt de PHP, pero para ambas necesitaba recompilar PHP, evitando esto opte por la solución mencionado.
La clase que decidí usar es una que lleva por nombre Cast128. Sin embargo después me enfrenté a otro problema y era que si ingresaba los datos a la Base de Datos de forma encriptada y necesitaba realizar alguna consulta, las operaciones se realizaban sobre los datos con encriptación.
Ejemplo: SELECT nombre FROM mi_tabla ORDER BY nombre
Lo que me hacia era ordenar por los nombres, pero encriptados!! lo cual no era lo que esperaba, es decir si tenia a Carlos y a Luis, no necesariamente ponía primero a Carlos, pues esto dependía de que la cadena de encriptación de Carlos iniciara con un caracter "menor" que el de la cadena de encriptación de Luis.
Entonces me di cuenta que iba por mal camino y decidí mejor optar por otro método: No encriptar nada desde PHP, sino que la encriptación la haría en la Base de Datos, para ello cree dos funciones en Oracle, una para encriptar y una para desencriptar y simplemente cada vez que hacía una inserción, colocaba la función"encriptar" junto a cada campo y si lo que hacia era una consulta, colocaba la función desencriptar, esto también en los WHERE, ORDER BY y mas.
Entonces mi solución final fue esa y me esta funcionando muy bien, ante la necesidad que tenia.
Ejs:
Para consultar:
SELECT DESENCRIPTA(nombre) FROM mi_tabla ORDER BY DESENCRIPTA(nombre)
Y para insertar:
INSERT INTO mi_tabla(nombre) VALUES(ENCRIPTA('Luis'));
Aclaro que en mi caso la necesidad era la de tener toda la información encriptada en la Base de Datos y no era el que la información viajara encriptada a través de la red.
Usuarios que han visto este tema también han visto...
- Instalar Eclipse PDT para PHP
- Proteger páginas por HTTP en PHP
- Recortar texto en PHP
- Modificación de cadenas en PHP
- Envío de boletines a emails de una base de datos MySQL en PHP
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.