epelpad

Encriptar texto, explicado y funcionando, 100% propio

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 están al final del post, si se quieren saltar toda la explicación y probarlos, se puede con toda tranquilidad. Hay una pequeña guía de lo que hay que hacer, posibles errores y cómo solucionarlos.


Si llegaste acá, te cuento… Estuve un poco aburrido ésta mañana, 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 métodos de alterar un mensaje, de manera que no lo pueda leer cualquiera, sólo aquel que sepa cómo decodificar el mensaje.
Esto se utilizó principalmente en las guerras para poder transmitir mensajes sin que la información pueda ser interpretada por el enemigo, en caso de ser atrapado el mensajero.

Uno de los métodos más viejos es el llamado cifrado César (por don Julio, aunque no se sabe si realmente lo uso él).
Este método consiste simplemente en una sustitución de letras por corrimiento de los símbolos en la tabla de caracteres.
Para entenderlo un poco mejor, vean la imagen de acá abajo:


Encriptar texto, explicado y funcionando, 100% propio



En dos filas iguales ponemos todos los símbolos, y corremos la de abajo hacia la izquierda N veces. Después 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 número N que se usó.


Bueno, creo que no da extenderme más 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 césar

Criptografía 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 más complejas, se puede mencionar a la máquina Enigma o la máquina 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 leídos (la misma idea de antes).

En el día de hoy el cifrado de datos es muuucho más complejo, y no me voy a meter en esos temas. Por mencionar alguno que esté vigente: el AES (http://es.wikipedia.org/wiki/Advanced_Encryption_Standard) que por tiene hasta 256 bits de clave de encriptación, 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 atrás) claves para dar con la correcta (aunque en los router muchos le ponen 123456…, cosa que restringe un poco la búsqueda en algunos casos). Para contrastar, si se usaba el cifrado del césar, 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 más complejas, se puede mencionar a la máquina Enigma o la máquina 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 leídos (la misma idea de antes).

En el día de hoy el cifrado de datos es muuucho más complejo, y no me voy a meter en esos temas. Por mencionar alguno que esté vigente: el AES (http://es.wikipedia.org/wiki/Advanced_Encryption_Standard) que por tiene hasta 256 bits de clave de encriptación, 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 atrás) claves para dar con la correcta (aunque en los router muchos le ponen 123456…, cosa que restringe un poco la búsqueda en algunos casos). Para contrastar, si se usaba el cifrado del césar, las claves posibles son 26, que son los distintos valores de N que se pueden usar.

Bueno, terminó la introducción. Ahora, a los bifes.



criptografia




No sé qué nombre tiene éste algoritmo de cifrado porque es mitad de uno que había 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 carácter. No puse porque no se ve bien con las imágenes 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.

Texto


Ahora, como algunos sabrán y otros no, todos los caracteres se pueden representar mediante códigos ASCII, que en definitiva son números que se le asignan a cada símbolo (y un par de cosas mas)



Bueno. Entonces agarremos cada uno de los simbolos de recién y convirtámolos a números con su equivalente ASCII. Después de eso, sumamos digito a digito el mensaje y la clave.


vbscript



Teniendo ésta suma, ya estaria la frase cifrada, pero si miramos la tabla ASCII, éstos números pueden caer en caracteres que pueden no tener representación 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 números que tenemos como resultados (cada uno de los que calculamos recién) en formato binario, obtenemos lo siguiente:


Aclaracion: no voy a entrar en el tema de cómo pasar a binario, porque se va el post a cualquier lado… Forma fácil, google:


encriptar



Para qué convertirlo a birario?!?!
Para separarlo en dos, usando una operación que se llama AND (la vas a ver en los script), y que lo que hace básicamente 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 más. Como multiplicamos en binario?

+ 0 x 0 = 0
+ 0 x 1 = 0
+ 1 x 1 = 1

Y se acabó la historia.

Y es el número AND que otro número?

Por dos números: éste 11110000 y éste otro 00001111. No importa cuanto valen esos números en decimal, el efecto lo vas a ver enseguida.

Para los tres primeros números de los que vimos hasta ahora ( que corresponden a "Hol" y "@se", queda asi:

desencriptar


La imagen quedó un poco enquilombada, si. Pero lo que importa es esto.

** A los que se le aplico la AND con el número 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 número de abajo, y donde hay unos, queda como está.


Si dividimos a los números que quedaron con los ceros a la derecha por 16, lo que hace esto es correr todo el número 4 dígitos a la derecha, y agregar 4 ceros a la izquierda (osea nada, el cero a la izquierda es igual de inútil que en los números comúnes).


Lo último que queda por hacer, es convertir éstos números raros otra ves a decimal (con la tabla ASCII)…

Queda así:


vbs




A éstos números habría 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 después 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 números posibles que pueden salir de la última operación (antes de la suma) están entre “0000”, que es 0, y “1111”, que es 15. Quiere decir que si sumamos 48, los resultados estarán 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:

Encriptar texto, explicado y funcionando, 100% propio



Bueno. A la derecha del recuadro azul está el cáracter correspondiente. Todos ésos son los que van a componer el mensaje. (en el orden A,B,C…)


Osea que el mensaje encriptado empezaría asi:
88>2=1

El texto completo es: “88>2=1<4;=>7=3:4>286



criptografia




Aclaracion: Por un detalle que se me paso de largo, el texto es procesado al revés y cuando se copia del clippboard al script hay un salto de línea o algo así de mas. No afecta al resultado, se puede codificar y decodificar el mismo texto.

Para probar y que dé los números con los que expliqué, tienen que cambiar ésta línea

+ mensaje = Encrypt(clip2str,key)

por ésta otra

+ mensaje = Encrypt("!odnuMaloH",key)

en el archivo “encriptar.vbs”

Despues de verificar (si es que querias) que los cálculos que hicimos hasta ahora son correctos, dejá la línea como estaba.




Ahora si, los códigos:

Copiar todo esto, pegar en un txt, y cambiarle la extensión a “.vbs”
En el archivo para encriptar, cambiar donde dice Key=”@USUARIO” por el de ustedes (tambien puede ser cualquier cadena de texto)


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



vbscript



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 = Len(key)
  KeyPos = 1
  LenStr = 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



encriptar



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("Word.Application")
  With objWord
    .Visible = False
    .Documents.Add
    .Selection.Paste
    .Selection.WholeStory
    str_x = .Selection.Text
    .Quit False
  End With
  clip2str = str_x
End Function


' De variable a clipboard
Function str2clip(str_x)
  Dim objWord

  Set objWord = CreateObject("Word.Application")
  With objWord
    .Visible = False
    .Documents.Add
    .Selection.TypeText str_x
    .Selection.WholeStory
    .Selection.Copy
    .Quit False
  End With
End Function





Instrucciones:

Una vez que tenés 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 código encriptado, le dan al script, y pones la clave del que generó el código. Aparece la ventana con el texto, dan aceptar y pueden pegarlo donde sea. Queda copiado en el clippboard!!


Importante!: El código generado nunca tiene otro carácter que no sea 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
No espacios, “enter”, NADA mas.


desencriptar



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 línea 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 línea / retorno de carro que pueda haber quedado.

4 - Desencriptan normalmente



No tengo mucha práctica con esto de los vbs, la verdad es la primera vez que hago que sirva para algo, y lo más 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 algún punto será muy bien recibido.

Y si alguno quiere probar de programarlo en otro lenguaje, bienvenido sea.


Por último, les dejo el Título 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



24 comentarios - Encriptar texto, explicado y funcionando, 100% propio

Bosster_018
Lo pruebo mas tarde, pero puede encriptar el texto con cualquier otra palabra que tu lo asignes como clave?

Osea encriptar &quot;hola mundo&quot; con la palabra clave &quot;gnome&quot;


Yo generalmente utiliza el método de encriptación &quot;AES&quot; con un ejecutable personal hecho en delphi 7

Saludos! +10
kaoseko +1
Muy bueno muchas gracias !! dejo +10
El_GaMeR_Dk +1
Exelente post! +10
secpre
Shout GifGIF
Gabilina
Hola, me gustaría armar una especie de lenguaje con caracteres particulares, con palabras y frases pero que en realidad esconde un texto normal encriptado.
secpre
Con algo que se pueda entender al leerlo, pero que tenga otro significado al desencriptarlo?? es un poco complicado, por no decir medio imposible...

digo, hacerlo con programas "sencillos" como este. Para algo medio inentendible (sin palabras reconocibles en el texto encriptado), se puede simplemente encriptar con esto, y despues reemplazar los caracteres 0 1 2 3 4 5 6 7 8 9 : ; < = > ? por el que se te ocurra.
Gabilina
@secpre
No yo digo que parezca una lengua extranjera que no se entienda. Pero que tenga palabras de un largo común y que cada tanto se repitan.
secpre
@Gabilina si, con un programa mucho mas complicado que este se puede.

Una idea: Tener (por ejemplo en un archivo) una tabla de correspondencias de palabras del lenguaje español al lenguaje Gabilina (por ejemplo, que tengan mas o menos el mismo numero de letras y vocales)

Y con el programa, vas buscando todas las palabras del texto que tienen su "par" en el diccionario. Esas palabras se reemplazan derecho, usando el diccionario.

Para las palabras que no esten en el diccionario, se pued
Gabilina +1
No se si yo no entendí tu respuesta o no me expliqué bien
Me gustaría hacer un programa en el cual se escribe un texto normal y sale otro texto en una especie de lengua desconocida con caracteres distintos (por ejemplo creando font particulares). Hasta aquí no pienso que sea difícil. Pero quisiera también que este texto de salida sea en realidad el texto encriptato con las técnicas modernas de criptogramas. Es decir, la apariencia de lengua desconocida es una máscara que esconde un criptograma. ¿Me explico?
renasiente +1
En los navegadores puedes usar una fuente pidiendola desde una URL, pero si copias el mensaje que no logras entender, lo copias a otra parte en el navegador o a un archivo de texto plato, veras el mensaje original porque no estas usando esa fuente. Esto se hacia y se podia demostrar facilmente en Windows Live Messenger (no se si skype).
Puedes abrir el bloc de notas y probar con las fuentes MT Extra, MS Reference y Webdings, escribir algo, luego lo copias a otra aplic
kenan77
no me corre me sale error linea 2
secpre
Sacale los [ ** color=#000000][ ** color=#000000] del principio y los [ * /color][ * /color] del final...

Esos los pone Taringa, no se por que. Ya los borre varias veces, pero siguen apateciendo. Ya lo aclaro en el post tambien
secpre
Ya esta arreglado. Lo acabo de probar copiando todo directamente del post, y anda

Espero que no se vuelva a agregar eso...
Sephiroth_77 +1
Tremendo primer post , gracias por compartirlo
secpre +1
Gracias!
JORDANCENA
EN QUE LENGUAJE DE PROGRAMACIÓN ESTA?
secpre
Es un script de visual basic

http://es.wikipedia.org/wiki/VBScript
Viktor894 +1
Muy buen post compañero
gpbarsky +1
Bastante bien explicado. Gracias.
andyloquendero +1
solo enendi lo primero pero de todos modos 10 puntos
secpre
Gracias!

Y si, es un poco duro de tragar si no se esta al tanto de algunos temas...

Me alegro que te haya interesado el tema. Y por mas que no lo entiendas, igual podes probar el programita!

Saludos.
alband +1
Muy interesante, lo recomiendo
secpre
Gracias!
k3lm3lt +1
Buenas tardes, muy bueno tu ejemplo, pero me sale un error: "variable no definida: 'clip2str' "; cual podría ser el problema, es que soy nuevo en esto. Gracias por tu ayuda. Saludos.
secpre
Te falto un pezazo de codigo...

Fijate que son DOS archivos en total. En el post hay una casilla de codigo que dice "Para encriptar:", otra casilla que dice "Para desencriptar:" y otra que dice "Y ésto va en los DOS, al final de lo que ya pegaron."

Seguramente te olvidaste de pegar el contenido de la tercer casilla al final de los otros dos archivos. Avisame si te funciono
MORFEO2016
increible genio, me ayudaste banda, lo recomiendo
elvaderxmulder
Z2lsIGRlIG1pZXJkYSwgZW5jcmlwdGFtZSBsYSBwaWEgZ2F0bw==
Matiex911
mucho pan para taringa jaja