Sv Community El Salvador

Soporte y Tecnología => Programación => Base de Datos => Mensaje iniciado por: edu_guerr en marzo 08, 2010, 06:27:53 pm

Título: [resuelto]Charset para guardar cadena encriptada en MySql
Publicado por: edu_guerr en marzo 08, 2010, 06:27:53 pm
•Lenguaje de programación usado:Java

Que tal companeros, resulta que tengo una aplicacion en java para
encriptar-desencriptar, funciona perfectamente, el detalle es que
cuando guardo la cadena encriptada en mysql no me guarda los caracteres
que he encriptado, si no que me guarda otros, me imagino que el
problema es el "charset" de la tabla, lo tengo como utf8 que es
compatible con ascii,que es lo que utilizo para encriptar,

Saben que charset deberia usar para no tener problemas
a la hora de guardar la cadena encriptada en mysql?
Título: Re:Charset para guardar cadena encriptada en MySql
Publicado por: rdoggsv en marzo 08, 2010, 08:40:38 pm
utf8 generic ci tendría que ser suficiente, ademas si estas cifrando me imagino que estas usando de la A..Z y de 0..9 o no ?

Tenes que hacer tu propio algoritmo o podes usar uno existente ?

Por ejemplo sha512 ?

Tírale un Show VARIABLES  LIKE '%CHARACTER_SET%';

Para que veas si tenes las de conexión en utf8
Título: Re:Charset para guardar cadena encriptada en MySql
Publicado por: vlad en marzo 08, 2010, 10:50:01 pm
para mayor claridad deberías de poner tú función de encriptación.
Título: Re:Charset para guardar cadena encriptada en MySql
Publicado por: Darkness en marzo 09, 2010, 07:52:48 am
Yo asi defino el campo...  claro que mi cifrado no es la gran onda...XD



Field            TYPE            Collation
------------   ------------   -----------------
PASSWORD   TINYTEXT     utf8_general_ci


Seria mejor ver la forma que encriptas asi como dice vlad...
Título: Re:Charset para guardar cadena encriptada en MySql
Publicado por: edu_guerr en marzo 09, 2010, 09:28:02 am
Tome parte de un codigo  lo hice  funcion,es decir , no es un codigo propio, les pondre las funciones que tengo para encriptar y desepcriptar y me ustedes me diran lo mejor.



Título: Re:Charset para guardar cadena encriptada en MySql
Publicado por: mxgxw en marzo 09, 2010, 09:34:09 am
para mayor claridad deberías de poner tú función de encriptación.

Sin necesidad de que nos enseñe su super-secreta función de encriptación.

Podría usar algo como esto http://iharder.sourceforge.net/current/java/base64/ (http://iharder.sourceforge.net/current/java/base64/). Lo que haces es convertir el objeto binario a base64 con lo que solo utiliza caracteres ASCII. Así podes usar un tipo VARCHAR o CHAR en la base de datos y luego utilizas la misma cláse para convertir de BASE64 a lo que necesitas :)

Con esto te evitas el lío de estar guardando caracteres en formato raro.
Título: Re:Charset para guardar cadena encriptada en MySql
Publicado por: vlad en marzo 09, 2010, 10:01:50 am
Sin necesidad de que nos enseñe su super-secreta función de encriptación.

Podría usar algo como esto http://iharder.sourceforge.net/current/java/base64/ (http://iharder.sourceforge.net/current/java/base64/). Lo que haces es convertir el objeto binario a base64 con lo que solo utiliza caracteres ASCII. Así podes usar un tipo VARCHAR o CHAR en la base de datos y luego utilizas la misma cláse para convertir de BASE64 a lo que necesitas :)

Con esto te evitas el lío de estar guardando caracteres en formato raro.

[modo troll]Claro, omitamos mencionar el overhead producido por almacenarlo en Base64 y el proceso extra de codificacion/descoficacion en Base64[/modo troll]

:D fuera de eso seria realmente bueno averiguar la causa exacta, en lo personal me iria por usar un campo binario y evitar todos los problemas, pero realmente al final lo mejor será lo que te funcione primero :)
Título: Re:Charset para guardar cadena encriptada en MySql
Publicado por: mxgxw en marzo 09, 2010, 10:13:03 am
[modo troll]Claro, omitamos mencionar el overhead producido por almacenarlo en Base64 y el proceso extra de codificacion/descoficacion en Base64[/modo troll]

:D fuera de eso seria realmente bueno averiguar la causa exacta, en lo personal me iria por usar un campo binario y evitar todos los problemas, pero realmente al final lo mejor será lo que te funcione primero :)

Si es Java, podría implementar la interfaz Serializable y guardar directamente el objeto en un BLOB como vos decis. Y luego utilizar las funciones Serialize y Deserialize para cargar el objeto en la base de datos :)

Sería lo más optimo.