Anuncios Google

[Solucionado, ¡Gracias zerozelta y Nekerafa!] {LUA} Ayuda con algoritmo para encriptar texto

Necesito un code en LuaDEV para encriptar texto, es que quiero hacer un conexión cifrada mediante sockets para usar en mi projecto Hybrid lo que quiero es que me encripte por ejemplo abc en 101112 siendo 10 la A, 11 la B y así hasta la z, y ABC (mayúsculas) sería: 383940, no se si me he explicado bien, el problema es que no se ni por donde empezar...

 

Como puedo hacer? Gracias por la ayuda y saludos!

 

PD: Agradecería un code para encriptar aún que sea solo una letra, para que el resto ya pueda seguir yo...

 

EDITO: Lo he solucionado y he añadido una función para generar las llaves aleatoriamente definiendo un mismo seed en ambas plataformas, dando como resultado una encriptación bastante segura.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de HappyFlowerPP

Pues...

Puede que este codigo t vaya aunque tendra muchos errores que no encuentro aunasí pruevalo y csi alguien quiere que lo corrija.

function encriptar(arch,llave)
file = io.open(arch,"r+")
for 1 in file:lines() do
local linea = file:read()
string.byte(linea)*llave
end
file:flush
end


Errores

A simple vista vi unos cuantos errores

function encriptar(arch,llave)
file = io.open(arch,"r+")
for 1 in file:lines() do
local linea = file:read()
string.byte(linea)*llave
end
file:flush
end

1 - file:flush tendría que ser file:flush()

2 - for 1? tendría que ser for k in file:lines()

3 - string.byte devuelve algo, sería una_variable = string.byte(linea)*llave

4- Falta file:write()

Es lo que ví, si te comento los errores es para que mejores en el mundo de la programación no para que lo tomes a mal

PD: Si me equivoco en algo agradecería que me dijesen que puse mal

 

Saludos!

Imagen de zerozelta

Si solo deseas codificar los

Si solo deseas codificar los datos que vas a utilizar, hice un pequeño codigo para encryptar datos manipulando el valor de los chars asi:

Utiliza el valor numerico de los chars de los textos y manipulalo como te plasca para codificar/reversar el caracter que quieras

por ejemplo:

function encrypt(texto,llave)		--- Encripta el texto basandose en su llave numerica
 
	local result = "";
 
	for i = 1,#texto do
		local numByte = string.byte(string.sub(texto,i)) -- Accedemos valor numerico del char en la posicion "i"
		local outByte = numByte * llave   -- Realizamos la operacion de encriptacion
		result = result..string.char(outByte)  -- Pasamos el char encriptado o codificado a string
	end
 
	return result;  -- Retornamos el string encriptado
end 

Esa es la funcion para encriptar, para desencriptar es lo mismo pero la operacion se hace a la inversa, esto es, que si multiplicaste el char por la keyEncrypt (numChar * key) se tiene que desencriptar dividiendo: (numChar / key)

 

Espero qeu te sirva, saludos¡¡


...

No me funciona el code, al menos con el Pc y Lua 5.1

Error:

lua: index.lua:8: bad argument #1 to 'char' (invalid value)
stack traceback:
    [C]: in function 'char'
    index.lua:8: in function 'encrypt'
    index.lua:19: in main chunk
    [C]: ?

 

PD: ¿Para que sirve el #?

El operador # (descrito en la

El operador # (descrito en la documentación de Lua) devuelve el número de elementos de una tabla, o el número de caracteres de un string.

PD. a mi sólo me funciona ese code usando 1 o 2 como llave (cualquier otro valor da error, en el psp no probé).

Creo que es porqué se pasa

Creo que es porqué se pasa del número 255, ya que un caracter ASCII es un byte y por lo tanto va del 0 al 255.

Lo he solucionado!

Listo, ya me va el code de zerozelta, he cambiado el * por un + y ahora encripta de marabilla, para más seguridad decidí generar las llaves aleatoriamente, definiendo el mismo seed en las dos plataformas, me genera los mismos números aleatorios y queda una clave casi indescifrable

 

Saludos!

Imagen de NEKERAFA

Mmm...

Es que tiene un grave error. No existen más caracteres que 256 en ASCII, por lo que si "a" es 40 y algo, si ponemos 5, el número pasaría a mas de 200 por lo que no habría caracteres...


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Imagen de zerozelta

no importa el limite de chars

no importa el limite de chars en ASCII, aunque no se detecten los caracteres ahi estan y pueden reversarse sin ningun problema

Pero si usas el operador + y -  para realizar las operaciones, si usas el operador * y / por lo que dice RG si genera problemas al parecer (yo siempre use + y - pero puse el otro para variarle un poco XD)


Imagen de NEKERAFA

Estas equivocado

ASCII esta definido para 256, a partir de ahí no hay ningún carácter definido. Los únicos que se pueden definir son de 0 a 255, de ahí que Deviante haya dejado algunos de los últimos caracteres vacíos, están definidos pero no tienen caracteres.
Por eso se utilizan ostras codificaciones como UTF-16 o Unicode.


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Yo acabo de terminar un sistema de encriptación...

Pero por motivos de seguridad para iThunder OS no puedo proporcionarte el código :(

Sólo te daré algunas pistas: debes almacenar el string a cifrar en partes (string.explode) en una tabla y luego interpretar cada entrada haciendola corresponder con un numero o otro digito que sirva como clave, devolviendo así un string nuevo y cifrado.

Para desencriptar es al revés ;D

Un saludo.


 

 

Imagen de NEKERAFA

Mmm...

También puedes enviar el código ascii con string.byte(caracter)

encriptarLetraminuscula = {

encriptarLetraminuscula = { a=10,b=11,c=12 } -- Ponemos los valores a las letras de minúsculas con los números
encriptarLetraMayuscula = { a=38,b=39,c=40}  -- Ponemos los valores a las letras de mayúsculas con los números
 
-- Podrías hacer un algoritmo así, un code no se me ocurre nada :S


 

 

Se pueden poner todas

Se pueden poner todas juntas:

claves = {
a=10,b=11,c=12...
A=38,B=39,C=40...
}

Lua es sensible a mayúsculas y minúsculas, recuerda ;)

Ya con esa tabla definida, se puede usar un for y tomar letra por letra del string a encriptar (usando string.sub) e irlas cambiando por su clave.

Entiendo

Ya entiendo, por lo menos tengo una base con la que empezar

 

Saludos y gracias!

 

PD: ¿Como te va con el ModHelper?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.