Hola: Es mi primer post, pero la verdad que creo que me puse las pilas para hacerlo Espero que
les guste.
Los script para encriptar y desencriptar estn al final del post, si se quieren saltar toda la explicacin y probarlos, se puede con toda tranquilidad. Hay una pequea gua de lo que hay que hacer, posibles errores y cmo solucionarlos.
Si llegaste ac, te cuento Estuve un poco aburrido sta maana, y me puse a investigar un poco sto de encriptar de mensajes.
El tema de cifrar mensajes viene del siglo V (cinco ) a.c., donde se empezaron a utilizar mtodos de alterar un mensaje, de manera que no lo pueda leer cualquiera, slo aquel que sepa cmo decodificar el mensaje. Esto se utiliz principalmente en las guerras para poder transmitir mensajes sin que la informacin pueda ser interpretada por el enemigo, en caso de ser atrapado el mensajero. Uno de los mtodos ms viejos es el llamado cifrado Csar (por don Julio, aunque no se sabe si realmente lo uso l). Este mtodo consiste simplemente en una sustitucin de letras por corrimiento de los smbolos en la tabla de caracteres. Para entenderlo un poco mejor, vean la imagen de ac abajo:
En dos filas iguales ponemos todos los smbolos, y corremos la de abajo hacia la izquierda N veces. Despus reemplazamos el mensaje por la letra que corresponda (la que quedo abajo) y ya est. Para decodificar el mensaje, con la misma tabla que se encript el mensaje, se puede decodificar. Osea, si le mando un mensaje cifrado a otra persona, sta deber saber:
+ Que el mensaje se codific el mensaje siguiendo stas reglas de corrimiento. + El nmero N que se us.
Bueno, creo que no da extenderme ms con stas cosas... se va a hacer demasiado largo. Para agregar una curiosidad: Si se cifra un mensaje con N=13 (solo letras, sin en la tabla), y se vuelve a cifrar lo que qued, recupero el mensaje original... Una boludez, pero nos permite hacer una sola maquina, que sin tocarle nada, codifica y decodifica.
Si se quedaron con las ganas de ver un poco mas, tienen info por todos lados Del cifrado csar Criptografa en general Otra mas Y ac una pag donde pueden cifrar y descifrar online.
Y bueno, el tema del cifrado de datos fue evolucionando y, ya hablando de cosas ms complejas, se puede mencionar a la mquina Enigma o la mquina de cifrado Lorenz de la segunda guerra mundial, con las que se mandaban mensajes secretos, y que si fuesen interceptados por el enemigo, no pudiesen ser ledos (la misma idea de antes). En el da de hoy el cifrado de datos es muuucho ms complejo, y no me voy a meter en esos temas. Por mencionar alguno que est vigente: el AES ([Link] que por tiene hasta 256 bits de clave de encriptacin, y usa un algoritmo bastante complejo. 256 bits de clave quiere decir hablando en criollo que si uno no sabe la clave, hay que probar con hasta 2^256 (un 1 con 77 ceros atrs) claves para dar con la correcta (aunque en los router muchos le ponen 123456, cosa que restringe un poco la bsqueda en algunos casos). Para contrastar, si se usaba el cifrado del csar, las claves posibles son 26, que son los distintos valores de N que se pueden usar.
Y bueno, el tema del cifrado de datos fue evolucionando y, ya hablando de cosas ms complejas, se puede mencionar a la mquina Enigma o la mquina de cifrado Lorenz de la segunda guerra mundial, con las que se mandaban mensajes secretos, y que si fuesen interceptados por el enemigo, no pudiesen ser ledos (la misma idea de antes). En el da de hoy el cifrado de datos es muuucho ms complejo, y no me voy a meter en esos temas. Por mencionar alguno que est vigente: el AES ([Link] que por tiene hasta 256 bits de clave de encriptacin, y usa un algoritmo bastante complejo. 256 bits de clave quiere
decir hablando en criollo que si uno no sabe la clave, hay que probar con hasta 2^256 (un 1 con 77 ceros atrs) claves para dar con la correcta (aunque en los router muchos le ponen 123456, cosa que restringe un poco la bsqueda en algunos casos). Para contrastar, si se usaba el cifrado del csar, las claves posibles son 26, que son los distintos valores de N que se pueden usar. Bueno, termin la introduccin. Ahora, a los bifes.
No s qu nombre tiene ste algoritmo de cifrado porque es mitad de uno que haba visto en la facultad, mitad de algo que me encontr por internet, y un poco de mi creatividad al momento de programarla, para que el resultado sea legible.
La idea (y de paso explicacion completa): Tenemos un mensaje, y una clave (que elige cada uno) Pongamos por caso: + Mensaje: HolaMundo! + Clave: @secpre
Aclaracion: se pueden usar espacios y cualquier otro carcter. No puse porque no se ve bien con las imgenes que van ahora. Bien. Primero, lo que vamos a hacer es escribir la clave abajo del mensaje, y repetirlo en caso de que sea necesario.
Ahora, como algunos sabrn y otros no, todos los caracteres se pueden representar mediante cdigos ASCII, que en definitiva son nmeros que se le asignan a cada smbolo (y un par de cosas mas) Ac tienen la tabla ASCII
Bueno. Entonces agarremos cada uno de los simbolos de recin y convirtmolos a nmeros con su equivalente ASCII. Despus de eso, sumamos digito a digito el mensaje y la clave.
Teniendo sta suma, ya estaria la frase cifrada, pero si miramos la tabla ASCII, stos nmeros pueden caer en caracteres que pueden no tener representacin en el teclado, o mejor dicho, en la escritura tradicional (por ej, si alguno cae en DEL o algo as, y se quiere escribir el mensaje cifrado en una web, o mandar por sms)
Solucion? Me la invent. Si representamos los nmeros que tenemos como resultados (cada uno de los que calculamos recin) en formato binario, obtenemos lo siguiente:
Aclaracion: no voy a entrar en el tema de cmo pasar a binario, porque se va el post a cualquier lado Forma fcil, google:
Para qu convertirlo a birario?!?! Para separarlo en dos, usando una operacin que se llama AND (la vas a ver en los script), y que lo que hace bsicamente es multiplicar los ceros y los unos de la imagen que sigue. Uno por uno, el de arriba con el que tiene abajo, y nada ms. Como multiplicamos en binario?
+0x0=0 +0x1=0 +1x1=1 Y se acab la historia. Y es el nmero AND que otro nmero? Por dos nmeros: ste 11110000 y ste otro 00001111. No importa cuanto valen esos nmeros en decimal, el efecto lo vas a ver enseguida. Para los tres primeros nmeros de los que vimos hasta ahora ( que corresponden a "Hol" y "@se", queda asi:
La imagen qued un poco enquilombada, si. Pero lo que importa es esto. ** A los que se le aplico la AND con el nmero 11110000, se le borro la parte donde ste tiene los ceros, y el resto qued igual. ** Donde se aplic la AND con el numero 00001111, se borraron los primeros 4 digitos, y los otros quedaron tal cual. Lo que hace la AND entonces (se lo puede ver somo si) es forzar un cero en el resultado donde est el cero en el nmero de abajo, y donde hay unos, queda como est.
Si dividimos a los nmeros que quedaron con los ceros a la derecha por 16, lo que hace esto es correr todo el nmero 4 dgitos a la derecha, y agregar 4 ceros a la izquierda (osea nada, el cero a la izquierda es igual de intil que en los nmeros comnes).
Lo ltimo que queda por hacer, es convertir stos nmeros raros otra ves a decimal (con la tabla ASCII)
Queda as:
A stos nmeros habra que convertirlos a sus correspondientes caracteres usando la tabla ASCII, pero que caracteres serian? (mira la tabla).
Si no miraste, son simbolos de los llamados no imprimibles, osea, no se pueden "escribir". Es por esto que despus de ste quilombo, y justo antes de convertirlo a caracteres nuevamente, LE SUMO 48. ( en los script esto aparece como OR 48, que no es una suma en el sentido clasico, pero para los valores que vamos a manejar sirve).
Que pasa cuando sumamos 48? Analizando un poco: Los nmeros posibles que pueden salir de la ltima operacin (antes de la suma) estn entre 0000, que es 0, y 1111, que es 15. Quiere decir que si sumamos 48, los resultados estarn comprendidos entre 48 y 63. Entre el 48 y el 63 en la tabla ASCII tenemos todos stos caracteres: 0 1 2 3 4 5 6 7 8 9 : ; <=>? Que se pueden escribir en cualquier txt pedorro, sin problemas de compatibilidad ni nada raro. Sumando 48 y pasando a ASCII en el ejemplo queda:
Bueno. A la derecha del recuadro azul est el cracter correspondiente. Todos sos son los que van a componer el mensaje. (en el orden A,B,C)
Osea que el mensaje encriptado empezara asi: 88>2=1 El texto completo es: 88>2=1<4;=>7=3:4>286
Aclaracion: Por un detalle que se me paso de largo, el texto es procesado al revs y cuando se copia del clippboard al script hay un salto de lnea o algo as de mas. No afecta al resultado, se puede codificar y decodificar el mismo texto. Para probar y que d los nmeros con los que expliqu, tienen que cambiar sta lnea + mensaje = Encrypt(clip2str,key) por sta otra + mensaje = Encrypt("!odnuMaloH",key) en el archivo [Link] Despues de verificar (si es que querias) que los clculos que hicimos hasta ahora son correctos,dej la lnea como estaba.
Ahora si, los cdigos:
Copiar todo esto, pegar en un txt, y cambiarle la extensin a .vbs En el archivo para encriptar, cambiar donde dice Key=@USUARIO por el de ustedes (tambien puede ser cualquier cadena de texto)
Para encriptar:
Option Explicit Dim key, mensaje key = "@USUARIO" mensaje = Encrypt(clip2str,key) str2clip(mensaje) MsgBox mensaje ' Funcion que encripta el mensaje Function encrypt(Str, key) Dim lenKey, KeyPos, LenStr, x, Newstr Dim EncCharNum, EncCharNum1, EncCharNum2 Newstr = "" lenKey = Len(key) KeyPos = 1 LenStr = Len(Str) str = StrReverse(str) For x = 1 To LenStr EncCharNum = Asc (Mid (str, x, 1)) + Asc (Mid (key, KeyPos, 1)) EncCharNum1 = EncCharNum And 240 EncCharNum1 = (EncCharNum1 \ 16) Or 48 EncCharNum2 = (EncCharNum And 15) Or 48 Newstr = Newstr & chr(EncCharNum1) Newstr = Newstr & chr(EncCharNum2) KeyPos = keypos+1 If KeyPos > lenKey Then KeyPos = 1 Next encrypt = Newstr
End Function
Para desencriptar:
Option Explicit Dim key, mensaje key = InputBox("Clave: ") mensaje = Decrypt(clip2str,key) str2clip(mensaje) MsgBox mensaje ' Funcion que desencripta el mensaje Function Decrypt(str,key) Dim lenKey, KeyPos, LenStr, x, Newstr Dim DecCharNum, DecCharNum1, DecCharNum2 Newstr lenKey KeyPos LenStr = = = = "" Len(key) 1 Len(Str)
str=StrReverse(str) For x = LenStr To 2 Step -2 DecCharNum1 = Asc (Mid (str, x, 1)) And 15 DecCharNum2 = Asc (Mid (str, x-1, 1)) And 15 DecCharNum = (DecCharNum1*16 Or DecCharNum2) Asc (Mid (key,KeyPos, 1)) Newstr = Newstr & chr(DecCharNum) KeyPos = KeyPos+1 If KeyPos > lenKey Then KeyPos = 1 Next Newstr=StrReverse(Newstr) Decrypt = Newstr End Function
Y sto va en los DOS, al final de lo que ya pegaron.
' Copia del clipboard a variable Function clip2str() Dim objWord, str_x Set objWord = CreateObject("[Link]") With objWord .Visible = False .[Link] .[Link] .[Link] str_x = .[Link] .Quit False End With clip2str = str_x End Function ' De variable a clipboard Function str2clip(str_x) Dim objWord Set objWord = CreateObject("[Link]") With objWord .Visible = False .[Link] .[Link] str_x .[Link] .[Link] .Quit False End With End Function
Instrucciones: Una vez que tens los archivos en tu PC, con la extension cambiada a .vbs al encriptador le cambiaste la Key, y demas... Copiar el texto que se quiere encriptar (ctrl+C) y correr el script (doble click o enter, la clasica).
El resultado te va a aparecer en una ventana, le dan aceptar y chau. Queda copiado en el clippboard!! - Con ctrl+V lo pegan donde sea. Para desencriptar, lo mismo. Copias el cdigo encriptado, le dan al script, y pones la clave del que gener el cdigo. Aparece la ventana con el texto, dan aceptar y pueden pegarlo donde sea. Quedacopiado en el clippboard!!
Importante!: El cdigo generado nunca tiene otro carcter que no sea 0 1 2 3 4 5 6 7 8 9 : ;<=>? No espacios, enter, NADA mas.
Importante!: Si prueban encriptar algo y desencriptarlo en el mismo momento, puede que no les ande. Se debe a que al final del texto encriptado hay un fin de lnea o algo de eso dando vueltas. Para que funcione siempre:
1 - Copian el texto original 2 - Encriptan 3 - PEGAN el texto encriptado, y lo copian otra vez. Ah se elimina cualquier fin de lnea / retorno de carro que pueda haber quedado. 4 - Desencriptan normalmente
No tengo mucha prctica con esto de los vbs, la verdad es la primera vez que hago que sirva para algo, y lo ms pesado lo encontr por ah. Cuando pueda lo sigo un poco y arreglo un poco los scripts.
Bueno, eso es todo. Espero que les interese.
Comenten (con responsabilidad por favor) Si se les dejar algn punto ser muy bien recibido. Y si alguno quiere probar de programarlo en otro lenguaje, bienvenido sea.
Por ltimo, les dejo el Ttulo del post encriptado con mi user @secpre, para que prueben de decodificarlo. 4=989593:192=4:9>3=4=5>092=9;3>2=5839=92=4:4>1<6=1=?=;<8:>>8<;83>992=4:4=4< 8<<=<>2==:59391=2>4>:<:;493=7<4>4>2<>;2=6=3:8