Es posible esto??? tengo un ini que me guarda valores 0,1
[lista]
var1 = "0"
var2 = "0"
var3 = "1"
etc...
es posible de alguuuuna manera cifrar estos datos??? me parece raro pk al ser solo 2 caracteres, cifrarlo es absurdo, ya sea "0"="%" y "1"="("
cualquiera puede saber ese cifrado xD
me interesa cifrarlo porque ando haciendo una app con un test muy personal y a la gente no le gustaría que sus respuestas sobre cosas personales quedaran grabadas en el movil de nadie.... y tampoco me vale poner "0"="$" or "%" or "/" etc...
ya que yo como creador, sabría qué es que y es justo lo que quiero evitar en especial, quiero que ni yo mismo pueda saberlo :S
Usa operaciones a nivel de bits para convertir esos 1 y 0 en un número (o unos números) decimal, que después sí puedes cifrar de alguna manera.
[gml]
//Un montón de variables con 1 y 0
var a = 1;
var b = 0;
var c = 1;
var d = 1;
var e = 1;
var f = 0;
var num = (a<<5) | (b<<4) | (c<<3) | (d<<2) | (e<<1) | f;
//num vale 46, que es 101110 en binario.
[/gml]
Y ya luego cifra ese número como gustes. De hecho, hace poco hice este sistema simple en JS para cifrar texto y números, no debería ser muy complicado pasarlo a GML:
https://gist.github.com/NiuWeb/d9dd13de3518b287e537d4c6b320c607
Cita de: NiuWeb en Noviembre 03, 2018, 02:25:20 AM
Usa operaciones a nivel de bits para convertir esos 1 y 0 en un número (o unos números) decimal, que después sí puedes cifrar de alguna manera.
[gml]
//Un montón de variables con 1 y 0
var a = 1;
var b = 0;
var c = 1;
var d = 1;
var e = 1;
var f = 0;
var num = (a<<5) | (b<<4) | (c<<3) | (d<<2) | (e<<1) | f;
//num vale 46, que es 101110 en binario.
[/gml]
Y ya luego cifra ese número como gustes. De hecho, hace poco hice este sistema simple en JS para cifrar texto y números, no debería ser muy complicado pasarlo a GML:
https://gist.github.com/NiuWeb/d9dd13de3518b287e537d4c6b320c607
No entendi de que sirve ese codigo para cifrar... simplemente cuenta los caracteres y se cifra con un random de simbolos pues es lo que se me ocurre si me explican lo agradeceria :D
Lo que hace es construir un numero decimal con los bits en las variables de la a a la f usando operadores a nivel de bits, el operador | equivale a una suma de bits y el operador << se llama corrimiento, y le agrega ceros al numero binario.
Asi, cada bit del numero 46 que en binario es 101110 corresponde al valor de cada una de las variables.
Aguanta un script ;D
Igual sigo sin entender, ni se como funciona ese corredor porque lo acabo de probar y es como potenciar un numero por x.
y el operador | no se como funciona asi que no entendi pero igual esta bien gracias por explicarme
Yo tampoco entendi Niu xD
Me 0ones un ejemplo con "mivariable = false" ? :B
Y si nos muestras como tienes almacenados los datos antes de meterlos al archivo ini para trabajar en un algoritmo ajustado a esas condiciones?
Te dejo unas imagenes que hice explicando como se opera con el bitwise or "|" y shift left "<<"
El resto del codigo de Niuweb se deduce solo.
(http://www.comunidadgm.org/preguntas-y-respuestas/cifrar-binarios/?action=dlattach;attach=17867;image)
(http://www.comunidadgm.org/preguntas-y-respuestas/cifrar-binarios/?action=dlattach;attach=17869;image)
Ok Ya creo que entendi por cierto en el ejemplo querias usar creo que 10+17 ya que 11+17 = 28 :-[
Pero sigo sin entender el cifrado, quiere decir que 46 caracteres se colocaran como cifrado??
ejemplo
Cifrado = "!#!$%#!#!$!%,.#!#!{=(.,@°?!%#!#!#! // Y mas cosas :v
expliquenme entre mas caca me entre al cerebro por lo menos puedo ser usado como estiercol :v
Ya se, pero el que no entendio lo que dije es solamente que entre mas conocimiento tenga al menos alguien me puede contratar, algo asi ya entienden... :-[ :-[ :-[
Cita de: Goganpis en Noviembre 09, 2018, 02:07:46 PM
Ok Ya creo que entendi por cierto en el ejemplo querias usar creo que 10+17 ya que 11+17 = 28 :-[
No es una suma bit a bit, es una comparacion con el OR logico, bit a bit.
El cifrado de NiuWeb solo usa binarios, mi ejemplo pasa de decimales a binario. En ese caso, el efecto que tiene es simplemente ir desplazando el bit, de manera que da la impresion de que "se va elevando al cuadrado".
El cifrado en realidad tiene como objetivo hacer ilegible los datos originales.
Supongamos que Kostra guarda en un archivo puro binario:
000011110001100
Esos datos se procesan segun un algoritmo usando los operadores ya explicados y obtiene
1111
Y ya está.
Ahora si quiere hacer otro cifrado, lo pasa a decimal, lo que equivaldria (1111) al numero 15
Entonces cuando algun curioso vaya a ver el archivo INI lo abrirá y verá simplemente:
15
Que a usos practicos no tiene. Hay que descrifrarlo, haciendo el proceso inverso, para luego interpretarlo dentro del juego.
Respondiendo a la pregunta:
"Pero sigo sin entender el cifrado, quiere decir que 46 caracteres se colocaran como cifrado?"
No, 46 es el resultado de cifrar el contenido del archivo.
Ah ok se me habia pasado por alto como funciona el OR :-[
No sabia nada de ese tipo de cifrado, puede usarse para un perfil de usuario en el cual guarda datos como en que nivel va
Sigo sin enterarme, me estan explicando algebra de bool que ya la di en el insti xd pero creo que no me entendieron.. quiero cifrar binarios.. no EN binario!! No quiero cifrar ni letras ni numeros, quiero cifrar BINARIOS cifrar unos y ceros en otra cosa indescifrable!!
Tengo una array
resp[0] = 1;
resp[1] = 0;
resp[2] = 0;
resp[3] = 1;
resp[4] = 0;
etc....
No porque tenga unos y ceros es necesariamente Álgebra Booleana, es más, aqui no simplificamos circuitos, encriptamos numeros binarios.
Ahora, el algoritmo de NiuWeb basta para ofuscar una cadena binaria como podria ser "10100" a algo como "111001111111001111001" , lo cual es una salida claramente diferente de la entrada.
Aunque hizo un ejemplo muy poco útil, puesto que usó el corrimiento en las mismas posiciones que los digitos. Asi que la entrada es igual a la salida, sin embargo, podrías modificarlo para que la salida fuese distinta de la entrada:
[gml]
var a = 1;
var b = 0;
var c = 1;
var d = 1;
var e = 1;
var f = 0;
var num = (a<<8) | (b<<7) | (c<<9) | (d<<4) | (e<<3) | f;
[/gml]
Para la entrada : 101110 (64 en decimal, si se quiere)
la salida: 792 (1100011000, en binario, si se quiere).
El algoritmo cifra la entrada, claramente.
Si no es eso, entonces?
Lo de bool lo decia por el or y la suma xd a ver.. creo que empiezo a pillarlo, trata de agarrar varios ceros y unos y juntarlos para formar un decimal y trabajar con eso? Lo que no entiendo es de donde salen esos a b c d e f 8 7 9 4 y 3, y como salio ese binario de 792, (no acabo de entender eso del corrimiento, ahora mirare el manual sobre eso ya que nunca antes lo utilice...)
Podrian, plis, cuando me pongan ejemplos, comentar las lineas? XD igual mas o menos creo que voy pillando el concepto general
Equis de xd.
A veeer...
[spoiler=Primero que todo...]
Cita de: Goganpis en Noviembre 03, 2018, 07:28:08 PM
Igual sigo sin entender, ni se como funciona ese corredor porque lo acabo de probar y es como potenciar un numero por x.
y el operador | no se como funciona asi que no entendi pero igual esta bien gracias por explicarme
Sí, básicamente la operación es la misma. Recordemos que en binario, cada numerito a la izquierda vale el doble que el anterior, lo que significa que mover todos esos numeritos una "casilla" a la izquierda es igual a multiplicar todo el número por 2.
O sea, que en resumen:
[gml]
( a << n ) == ( a * power(2 ,n) )
[/gml]
Sólo que los operadores a nivel de bits tienen, digamos que, su función específica y uno puede entender qué está intentando hacer el código.
[/spoiler]
Y ahora sí, dejo adjunto un ejemplo donde se aplica la idea que di inicialmente de una forma un tanto más compleja y funcional. El concepto es simple: Se ingresa un arreglo lleno de unos y ceros, y el primer script devuelve un texto cifrado. Luego, ese texto se ingresa en el segundo script y éste se encarga de regresar nuevamente el arreglo original.
El funcionamiento de todos los códigos está en comentarios dentro del mismo editable, ojo que también hay código en el
Creation Code de la habitación.
EDIT: Pero ojo, que este "cifrado" no es ni de cerca algo seguro o que pueda proteger la información; si se conoce el algoritmo es muy fácil saber qué había originalmente. El objetivo es en realidad "compactar" los datos binarios en un solo mensaje que se pueda cifrar (esta vez sí con un algoritmo especializado en seguridad). Por eso el enlace que compartí en mi primer comentario, aunque seguramente hayan otras alternativas más seguras y simples.
(Cualquier error díganlo faasst v:)
No me sale xdd
Niu baje tu ejemplo con el movil de mi madre (desde donde te hablo xd) y lo pase al pc, lo abri, lo ojeé e hice copypaste de los scripts sin ediciones, y lo del creation code lo adapte con un testeo... Tengo la array 1d resp con longitud 60 entonces asi lo adapte:
[gml]var datos = resp;
show_message(string(datos)); //me sale bien creo, sale algo como {,{,1,1,0,1,0,1,0,0,0....,}, } con los 60
var cifra = cifrar_binarios(datos);
ini_save(fname,sect,"resp",cifra); //no me vuelvas a preguntar que hace ini_save xdd el caso es que graba una string muy corta, supongo que es pk agarra de 4 en 4
test = ini_load(fname,sect,"resp",-1); //carga bien el string que guarde antes...
descifra = descifrar_binarios(test,60); //tambien puse array length 1d(datos) y da lo mismo xd
show_message(string(descifra)); //aqui lo que no encaja, me devuelve unos y ceros, pero me devuelve pocos y no tienen nada que ver con los 60, ademas, necesito una array aunque supongo que esa parte ya se buscarme la vida con las funciones string xd[/gml]
No veo nada erróneo. De hecho, hice la prueba con 60 unos y ceros también, a ver si con tantos el script fallaba:
[gml]
//PRUEBA DEL SCRIPT
//Datos a cifrar
var datos = array(
0, 0, 1, 1,
0, 0, 0, 1,
1, 0, 1, 1,
0, 1, 1, 1,
0, 1, 0, 0,
0, 1, 1, 1,
0, 1, 1, 1,
1, 1, 0, 0,
0, 0, 0, 1,
1, 1, 1, 1,
0, 1, 1, 0,
1, 0, 0, 1,
1, 0, 1, 0,
1, 0, 0, 1,
1, 0, 1, 1
);
//Crear cifrado
var cifra = cifrar_binarios(datos);
//Mostrar en pantalla
show_debug_message( cifra );
//Guardar y cargar en un INI
ini_open('datos.ini');
ini_write_string('datos', 'cifrado', cifra);
ini_close();
ini_open('datos.ini');
var cifra2 = ini_read_string('datos', 'cifrado', '');
ini_close();
//Descifrar contenido cifrado
var descifra = descifrar_binarios( cifra2, array_length_1d(datos) );
//Mostrar en pantalla
show_debug_message( descifra );
if array_equals(datos, descifra) {
show_debug_message( '¡Tienen los mismos valores!' );
}
[/gml]
El resultado en la consola es éste:
dblhehhmbpgjkjl
{ { 0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,1 }, }
¡Tienen los mismos valores!
O sea, que la cantidad de datos no daña el proceso de cifrado, incluso si se extraen de un archivo
ini.
Como primera depuración, podrías omitir la parte de guardar la cadena en el
ini y sólo cifrar y descifrar en el mismo código.
Si te funciona bien (debería, si no has modificado los scripts), la segunda prueba que puedes hacer es contar el número de caracteres de la cadena que se guarda en el
ini. Si son sesenta dígitos a guardar, la cadena cifrada debería tener exactamente 15 caracteres. Si no tiene esos caracteres, el error está en el script que guarda el ini. Mira, así se ve el archivo que se guardó con el código de arriba:
(https://dl.dropboxusercontent.com/s/hq22s8sxvqbicpr/Screenshot_2.png?dl=0)
Ahora bien,
Cita de: kostra en Noviembre 12, 2018, 04:32:47 PM
aqui lo que no encaja, me devuelve unos y ceros, pero me devuelve pocos y no tienen nada que ver con los 60
¿Cuántos unos y ceros te devuelve?
Revisa que la cadena que entra y sale del ini tenga únicamente letras minúsculas entre la
a y la
p. Cualquier espacio u otro caracter va a dañar los datos.
Cita de: kostra en Noviembre 12, 2018, 04:32:47 PM
ademas, necesito una array aunque supongo que esa parte ya se buscarme la vida con las funciones string xd
El script
descifrar_binario() ya te devuelve un arreglo con los unos y ceros descifrados.
También ayudaría que mostraras el arreglo original (
resp), la cadena que se cifra, la cadena que se guarda en el INI y la cadena que se extrae del mismo
(y, sólo por si acaso, los scripts que usas para guardar y cargar xdddd).
Nada, no me sale el ultimo debug. Adjunto imagen y no, no edite script, la unica diferencia es que no uso el script array (pero gracias igual me servira en el futuro xd
Pero haz todos los pasos y muestra los resultados de todos los debug xd.
Debe ser bien mamón usar el foro en el movil y sobre todo poner los problemas del codigo asi.
Hace rato no había temas tan populares, sigan asi ;D
Peor es no poder ni compilar por culpa de no tener wifi T.T espero sea en menos de dos semanas y no tarden tanto en llegar los de vodafon xd
PD Niu, por si acaso borre algo sin querer al borrar los mil comentarios xd, cooie y pegue de nuevo los scripts completamente y sigue fallando el descifrado, el c8frado anda bien, salen 15 letras pero al descifrar me da la sensacion de que falla algun bucle, solo agarra una letra quiza... Pk solo me salen 4 binarios
(https://i.kym-cdn.com/photos/images/original/001/256/183/9d5.png)
Agarra esas 15 letras que te guarda y mételas directamente como parámetro en el script de descifrado. Así vemos si es error del mismo, o si se está cargando mal el contenido (ojo con copiar también otros caracteres).
Funciona perfectamente u.u' a ver que le pasa al ini load u.u
Edito. Correcto, en el ini load, en el value predeterminado puse -1 en vez de una string, entonces el ini load lo interpreto como real xd
Bueno arreglado y adaptado al 100% me ha costado adaptarlo justo en lo que queria pero ya esta, y por suerte me lo facilitaste al meterlos en un array en el descifrado uff xd bueno sino hubiese usado string char at xdd
GRACIAAAAAS :******