Ir al contenido principal

1# Introducción a la criptografía

 

__ Indice __


¿Qué es la criptografía?

¿Qué es cifrar?

Tipos de cifrado

Cifrado por sustitución en NodeJS

Código

Github

PD

Imagen relacionada

__  ¿Qué es la criptografía? __

Se ha definido como el uso de técnicas para alterar estructuras lingüísticas de ciertos mensajes, con el fin de hacerlos ininteligible a receptores no deseados.

Estás técnicas se han utilizado en todas las áreas de conocimiento humanos, ya sea en la ciencia, tecnología y arte, así que el fin de la criptografía es el de conseguir confidencialidad en la información

Con la aparición de la informática, y el creciente uso de la digitalización. Ha hecho que el tema de privacidad sea cada vez más importante, ya que la transición de un usuario por la red puede ser interceptada y con ello nuestros datos se vuelven vulnerables.

Para lograr esto, se han creado lo que se llama, cifrados.

__  ¿Qué es un cifrado? __

Resultado de imagen para Cifrados

El procedimiento mediante un algoritmo para transformar un mensaje, este con el fin que sea incomprensible, o al menos, difícil de entender a cualquier persona que no cuenta con la clave de seguridad

El juego de caracteres (alfabeto) usado en el mensaje sin cifrar puede no ser el mismo que el juego de caracteres que se usa en el mensaje cifrado. 

A veces el texto cifrado se escribe en bloques de igual longitud. A estos bloques se les denomina grupos. Estos grupos proporcionaban una forma de verificación adicional, ya que el texto cifrado obtenido debía tener un número entero de grupos. Si al cifrar el texto plano no se tiene ese número entero de grupos, entonces se suele rellenar al final con ceros o con caracteres sin sentido. 

Aunque el cifrado pueda volver secreto el contenido de un documento, es necesario complementarlo con otras técnicas criptográficas para poder comunicarse de manera segura. Puede ser necesario garantizar la integridad la autenticación de las partes, etcétera. 


__ Tipos de cifrado __ 

Un sistema de cifrado se denomina:
  • simétrico cuando utiliza la misma clave para cifrar y descifrar. Los métodos más conocidos de este tipo de cifrado son el DES, el Triple DES y el AES.
  • asimétrico al usar claves diferentes: una pareja compuesta por una clave pública, que sirve para cifrar, y por una clave privada, que sirve para descifrar. El punto fundamental sobre el que se sostiene esta descomposición pública/privada es la imposibilidad práctica de deducir la clave privada a partir de la clave pública. A este tipo de cifrado también se le llama criptografía de clave pública o PKE (del inglés Public-Key Encryption). Los métodos más conocidos de este tipo de cifrado son el RSA y ElGamal.
La utilización de un sistema simétrico o asimétrico depende de las tareas a cumplir. La criptografía asimétrica presenta dos ventajas principales: suprime el problema de transmisión segura de la clave y permite la firma electrónica. No reemplaza sin embargo los sistemas simétricos, ya que los tiempos de cálculo son evidentemente más cortos con los sistemas simétricos que con los asimétricos. 

 __ Cifrado por sustitución __

 El cifrado que vamos a realizar, es bastante simple. En cada blog, iremos poco a poco subiendo la dificultad.

El concepto es el siguiente:

Separaremos el abecedario en dos mitades, la primera de la A hasta la M, y la segunda cadena será de la N hasta la Z. Y vamos a estar sustituyendo la letra de una cadena, por otra letra que se encuentre en la misma posición de la otra mitad

      A  B  C  D  E  F  G  H  I  J  K L M
      ↕   ↕   ↕  ↕   ↕  ↕  ↕   ↕  ↕  ↕  ↕  ↕  ↕
      N  O  P  Q  R  S  T  U V W X Y Z


Ahora vamos a realizar esto en nodejs, lo primero es importar los módulos que utilizaremos a lo largo del proyecto.

readline: Es para poder leer datos de entrada medienta el teclado en la consola de node

chalk: Nos permite imprimir nuestro texto con rgb, lo que significa que podremos darle color al texto mostrado en la consola, solamente para que se vea bonito.


La primera función que vamos a hacer, será la de recibir el texto del usuario.

readline nos pide crear una interfaz de entrada y salida (readline.createInterface()), que será el proceso donde mostraremos el texto al usuario que indicará que tiene que ingresar una palabra.

lo siguiente es lanzar la pregunta y esperar la respuesta del usuario:

Pregunta: "Ingresar la palabra que sea cifrar o descifrar"

Respuesta: Será e texto
la parte de: createCryptoText(respuesta.toString().toUpperCase()) <= Aquí estamos mandando el texto a la siguiente función que tenemos que crear, donde le mandamos el texto del usuario.

toString(): Es para convertir el valor del usuario a tipo cadena de caracteres (String)

toUppercase(): Es para convertir todo nuestro texto en mayúsculas 



La siguiente función ya es la interesante, esta recibe como parámetro el texto que el usuario ha introducido.

separator: Guardará  cada una de las letras que vayamos sacando del texto.

n: Guardará el código ASCII de cada letra, el código ASCII es la representación numérica de cada carácter en el teclado, A = 65, Z = 90 Así con una simple suma o resta, podemos intercambiar los caracteres.

textCrypto: Guardará todo el arreglo ya cifrado del texto

arrayText: Guardará el arreglo del texto original del usuario

Al final, solamente con un foreach recorremos el arreglo, sacamos su valor de cada letra en código ASCCI con charCodeAt(), y con una condición evaluamos si la letra es menor o igual a M, si es así solamente le sumamos 13 posiciones para sacar su equivalente en la otra cadena, y si es mayor, le restamos la misma cantidad.

A = 65
N = 78

65 + 13 = 78 = N


Si lo que detectamos es un espacio en blanco, que su valor en ASCII es 32, lo vamos a cambiar por el signo que numeral.

Ya por último, mostramos el arreglo cifrado, y con otro foreach, mostramos carácter por carácter para formar la palabra entera.

Para imprimirlo, podemos ver que utilizamos chalk, para darle color

La función menu, solamente tiene como propósito hacer que el proyecto se vea más profesional, así que su función es hacer el código más estético.

 Hemos terminado :D

 

__ Código __

const readline = require('readline');
const chalk = require('chalk');


function readText() {

var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});

rl.question('Ingresar la palabra que desea cifrar o descifrar: ', (respuesta) => {
createCryptoText(respuesta.toString().toUpperCase())
rl.close();
});
}

function createCryptoText(text) {
let separator = "", n
let textCrypto = []
let arrayText = text.split(separator)

console.log(chalk.blue('\nArreglo del original: \n'))
console.log(arrayText)

arrayText.forEach(element => {
if(element.charCodeAt() < 78 && element.charCodeAt() >= 65) {
n = parseInt(element.charCodeAt())
textCrypto.push(String.fromCharCode(n + 13))
} else if(element.charCodeAt() >= 65) {
n = parseInt(element.charCodeAt())
textCrypto.push(String.fromCharCode(n - 13))
} else if(element.charCodeAt() == 32) {
textCrypto.push("#")
} else if(element == "#") {
textCrypto.push(" ")
}
})

console.log(chalk.red('\nArreglo de crypto: \n'))
console.log(textCrypto)
arrayText = " "
textCrypto.forEach(element => {
arrayText += element
})

console.log(chalk.yellow("\nTexto terminado: " + arrayText))
}

function menu() {
let banner =
`


██████╗██████╗ ██╗ ██╗██████╗ ████████╗ ██████╗
██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗╚══██╔══╝██╔═══██╗
██║ ██████╔╝ ╚████╔╝ ██████╔╝ ██║ ██║ ██║
██║ ██╔══██╗ ╚██╔╝ ██╔═══╝ ██║ ██║ ██║
╚ ██████╗██║ ██║ ██║ ██║ ██║ ╚██████╔╝
╚═════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝

`
console.log(banner)
readText()
}

menu()

  __ Github __

https://github.com/NeoTRAN001/Crypto/blob/master/crypto.js

__ PD__

 

El cófigo lo hemos hecho con Nodejs, pero a lo largo del curso iremos mostrando los diferentes tipos de cifrados en distintos lenguajes :D

Comentarios

Entradas más populares de este blog

3# Criptografía - Cifrado por sustitución Atbash

__ Indice __ ¿Qué es Atbash? Proceso de cifrado Proceso de descifrar  Código Github ¿Qué es Atbash? Atbash es un método de cifrado para el alfabeto hebreo, por lo tanto entra en la clasificación de           - Cifrado Clásico - se le conoce también como el método espejo, pues consiste en sustituir en la que la primera letra (A) será sustituida por la última (Z), la segunda por la penúltima (B - Y) y así sucesivamente. Proceso de cifrado Vayamos a probarlo, vamos a cifrar nuestra palabra de costumbre RegularWeb: R  =   I E  =  V G  =  T U  =  F L  =  O                  Resultado : IVTFOZIDVY A  =  Z R  =  I W =  D E  =  V B  =  Y Proceso de descifrar  Para descifrar es el mismo procedimiento. R  =   I E  =  V G  =  T U  =  F L  =  O                  Resultado : REGULARWEB A  =  Z R  =  I W =  D E  =  V B  =  Y Código Github   https://github.com/NeoTRAN001/Crypt

2# Criptografía - Polybios

__ Indice __ ¿Qué es Polybios? Proceso de cifrado Proceso de descifrar Código Github __ ¿Qué es Polybios? __ Es un sistema de cifrado en el que se coloca todo el alfabeto en una matriz, y cada letra tiene una posición en la que será convertida.  Es considerado el algoritmo de cifrado más antiguo que se tiene registro •Su nombre se le da por el Historiador griego Polybios • Alrededor del año 150 a. C. __ Proceso de cifrado __ Bien, el proceso de cifrado es bastante fácil, tenemos nuestra matriz bidimensional , si queremos traducir el carácter - ? - nos da como resultado [ 0, 0 ] Y pues, eso es todo... Vayamos a cifrar la palabra Hola H = [4, 9]    o = [1 , 9]    l  = [1, 5]     a = [0, 4]  Resultado: 49191504 __ Proceso de descifrar __  Ahora si queremos el proceso inverso, solamente tenemos, tenemos que mandarle las posiciones y este nos devolverá el carácter [4, 9] = H     [1 , 9] = o    [1, 5] = l    [0

Sockets en C#

__ Índice __ ¿Qué son los sockets en programación? Ejemplo en C# Github __ ¿Qué son los socket en programación? __ Un socket es un método de comunicación entre un programa cliente y un servidor. Entonces podemos decir que los sockets, son el "tunel" de comunicación entre dos aplicaciones. __ Ejemplo en C# __ Servidor  Creamos un nuevo proyecto en consola que será el código del servidor Importamos las librerías necesarias para los sockets Declaramos dos variables, una será la dirección del Server , ya que estamos haciendo todo en nuestra pc la dirección debe de ser la local, localhost o 127.0.0.1 La otra variable será el puerto de conexión, es recomendable seleccionar un puerto alto. Es por eso que las aplicaciones utilizan 8080 . Ahora tenemos que crear un objeto de tipo Socket, que nos pide tres parámetro: 1- Esquema del tipo de diccionario: AddressFamily.InterNetwork dice que utilizará una dirección IP