Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)

José Antonio Sandoval Acosta
José Antonio Sandoval AcostaProfesor de Tiempo Completo at ITSG en ITSG

Algorimos básicos para cifrar y descifrar frases Encriptar y desencriptar Se presentan varios algoritmos básicos desarrollados en clase en lenguaje C#

Algoritmos básicos para cifrado y descifrado de frases
Encriptar y Desencriptar
Transposición Inversa
El Algoritmo Transposición inversa es el más sencillo de todos,
genera una cadena al revés de cómo fue escrita: es decir, si
escribimos la palabra PANDA el algoritmo debe regresar ADNAP
como cadena cifrada.
La forma de descifrarlo es aplicando el mismo método a la cadena
cifrada, por lo que requiere la creación de un solo método de
programación.
Ejemplo de una función que cifra en Transposición Inversa en C#
private string cifra_inversa(string cadena)
{
string inversa = "";
for (int i = cadena.Length - 1; i >= 0; i--)
{
inversa = inversa + (cadena[i]);
}
return inversa;
}
Transposición Binaria
La Transposición Binaria al igual que la inversa mueve de su
lugar los caracteres de la cadena original, la diferencia radica
en que lo hace en pares de caracteres sin tomar en cuenta los
demás caracteres de la cadena.
Por ejemplo si tecleamos la palabra MEXICO el algoritmo
divide la frase en pares de la siguiente forma: ME|XI|CO, e
intercambia el contenido de cada par, el carácter de la
izquierda lo pone a la derecha y viceversa, al final regresa
EMIXOC como frase cifrada.
La forma de descifrarlo es aplicando de nuevo el mismo
algoritmo por lo que solo requiere crear una rutina en código
de programación
Ejemplo de una función que cifra en Transposición Binaria en C#
private string cifra_binaria(string cadena)
{
string binaria = "";
int i = 0;
while (i < cadena.Length)
{
if ((i + 1) < cadena.Length)
{
binaria = binaria + cadena[i + 1].ToString() +
cadena[i].ToString();
}
else
{
binaria = binaria + cadena[cadena.Length - 1].ToString();
}
i = i + 2;
}
return binaria;
}
Algoritmo Incremental
El Algoritmo Incremental requiere una clave pública entera.
Genera una nueva cadena cifrada sumando carácter por
carácter la cantidad capturada en laclavepública al código ASCII
de la cadena original.
La forma de invertirlo es restando la clave pública, por lo que es
posible que requiera dos métodos para hacer la tarea, uno para
cifrar y otro para descifrar.
Ejemplo de las funciones que cifran y descifran frases con el algoritmo incremental en C#:
private string cifra_incrementa(string cadena, int cPub)
{
char remplaza;
string re_incrementa = "";
for (int i = 0; i < cadena.Length; i++)
{
remplaza = (char)((int)cadena[i] + cPub);
re_incrementa = re_incrementa + remplaza.ToString();
}
return re_incrementa;
}
private string des_incrementa(string cadena, int cPub)
{
char remplaza;
string re_incrementa = "";
for (int i = 0; i < cadena.Length; i++)
{
remplaza = (char)((int)cadena[i] - cPub);
re_incrementa = re_incrementa + remplaza.ToString();
}
return re_incrementa;
}
Algoritmo Exponencial
El Algoritmo Exponencial tiene mucha similitud con el
Algoritmo Incremental, en este caso se pide dos claves
numéricas, la clave pública y la clave privada, las cuales son
multiplicadas entre sí, una vez que tenemos el resultado
dicho número entero se utiliza para sumarlo al código ASCII
de cada carácter de la frase que vamos a cifrar, con esto
obtenemos al final una nueva frase ya cifrada.
La forma de descifrarlo es restando el número que
obtuvimos de la multiplicación de las claves, por lo que es
posible que se requieran dos métodos de programación,
uno para cifrar y otro para descifrar la frase.
En este caso las funciones son exactamente las mismas que
en el algoritmo incremental, el único cambio es que al
capturar las dos claves estas se envían ya multiplicadas en el parámetro numérico de cada
función, de esta forma el código es reutilizable.
Ejemplo de funciones donde se usa el algoritmo exponencial en C#:
// llamado a las funciones enviando las claves y amultiplicadas
string cifrado = cifra_incrementa(texto.Text, cPub * cPriv);
string descifrado = des_incrementa(cifrado, cPub * cPriv);
// Se utilizan las mismas funciones que para el algoritmo incremental
private string cifra_incrementa(string cadena, int cPub)
{
char remplaza;
string re_incrementa = "";
for (int i = 0; i < cadena.Length; i++)
{
remplaza = (char)((int)cadena[i] + cPub);
re_incrementa = re_incrementa + remplaza.ToString();
}
return re_incrementa;
}
private string des_incrementa(string cadena, int cPub)
{
char remplaza;
string re_incrementa = "";
for (int i = 0; i < cadena.Length; i++)
{
remplaza = (char)((int)cadena[i] - cPub);
re_incrementa = re_incrementa + remplaza.ToString();
}
return re_incrementa;
}
Algoritmo Exponencial Diferido
El algoritmo Exponencial Diferido funciona muy similar al
Exponencial con la diferencia que las claves enteras no se
multiplican al inicio, la clave privada sirve para referenciar
un arreglo en memoria, elcual contiene números enteros en
un rango de 1 a 99 (puede seleccionarse otro rango).
El usuario en la clave privada debe seleccionar un número
entero que se refiere a la posición en el arreglo de la cual
extraemos el número que usaremos para multiplicar con la
clave pública, una vez que obtenemos el resultado el resto
es exactamente igual al algoritmo exponencial.
En este caso, antes de llamar las funciones debemos buscar
en el arreglo el valor correspondiente a la posición enviada
en la clave privada. Para este ejemplo el arreglo es de 20
posiciones.
Ejemplo de funciones donde se usa el algoritmo exponencial diferido en C#:
byte[] diferido = new byte[20] {3, 5, 6, 8, 9, 11, 12, 14, 15, 17,
19, 21, 25, 27, 31, 35, 58, 46, 55, 59};
clave = diferido[cPriv - 1];
string cifrado = cifra_incrementa(texto.Text, cPub * clave);
string descifrado = des_incrementa(cifrado, cPub * clave);
// Llamado a las funciones enviando las claves ya multiplicadas
// Se utilizan las mismas funciones que para el algoritmo incremental
private string cifra_incrementa(string cadena, int cPub)
{
char remplaza;
string re_incrementa = "";
for (int i = 0; i < cadena.Length; i++)
{
remplaza = (char)((int)cadena[i] + cPub);
re_incrementa = re_incrementa + remplaza.ToString();
}
return re_incrementa;
}
private string des_incrementa(string cadena, int cPub)
{
char remplaza;
string re_incrementa = "";
for (int i = 0; i < cadena.Length; i++)
{
remplaza = (char)((int)cadena[i] - cPub);
re_incrementa = re_incrementa + remplaza.ToString();
}
return re_incrementa;
}
Algoritmos Mixtos
Es posible crear algoritmos mixtos combinando dos o más de los
mencionados anteriormente, por lo que el código fuente requiere
tantos métodos sean necesarios para cifrar y descifrar.
Es recomendable que al combinar dos o más algoritmos para
cifrar frases primero apliquemos el más sencillo y después sobre
la frase resultante aplicamos el de mayor complejidad.
Para descifrar por medio de algoritmos mixtos solo debemos
aplicar los algoritmos en orden inverso a como se usaron en el
cifrado.
Notas: Es necesario ser prudente al momento de seleccionar los
números enteros que utilizaremos para las multiplicaciones ya
que de ser números muy grandes el resultado será un valor
demasiado alto que puede ocasionar problemas de
procesamiento, lo cual no está contemplado en el código de ejemplo mostrado en cada
algoritmo.
-----------------
Mtro. José Antonio Sandoval Acosta.
Docente de Ingeniería en Sistemas Computacionales.
México. 18 de marzo de 2017.

Recomendados

2.3.1 por
2.3.12.3.1
2.3.1Aldo Antonio Blanco Villalobos
5.1K vistas12 diapositivas
Programación 3: árboles binarios y ordenados por
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosAngel Vázquez Patiño
15.5K vistas33 diapositivas
ejercicios de subnetting por
ejercicios de subnettingejercicios de subnetting
ejercicios de subnettingMarcelo Herrera
22.1K vistas6 diapositivas
Ciclos por
CiclosCiclos
CiclosTaqui Wajuyat Flor
1.9K vistas13 diapositivas
SUBNETEO DE REDES por
SUBNETEO DE REDESSUBNETEO DE REDES
SUBNETEO DE REDESOrlando Perez
81.6K vistas26 diapositivas
Informe vlans por
Informe vlansInforme vlans
Informe vlanscespistols
2.7K vistas7 diapositivas

Más contenido relacionado

La actualidad más candente

Clase10 2-lenguaje ensamblador por
Clase10 2-lenguaje ensambladorClase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensambladorInfomania pro
2.8K vistas44 diapositivas
Presentación PSeInt por
Presentación PSeIntPresentación PSeInt
Presentación PSeIntCarlos Gómez García
6K vistas27 diapositivas
Arquitectura RISC-CISC por
Arquitectura RISC-CISCArquitectura RISC-CISC
Arquitectura RISC-CISCCristian Aguirre Esparza
10.3K vistas4 diapositivas
Apuntes generación de codigo intermedio por
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedioHumano Terricola
1.4K vistas14 diapositivas
Presentación JavaScript por
Presentación JavaScriptPresentación JavaScript
Presentación JavaScriptLorenzo Morillas Tomás
11.5K vistas28 diapositivas
Bitácora de base de datos por
Bitácora de base de datosBitácora de base de datos
Bitácora de base de datosLalo Osorio
36.2K vistas15 diapositivas

La actualidad más candente(20)

Clase10 2-lenguaje ensamblador por Infomania pro
Clase10 2-lenguaje ensambladorClase10 2-lenguaje ensamblador
Clase10 2-lenguaje ensamblador
Infomania pro2.8K vistas
Apuntes generación de codigo intermedio por Humano Terricola
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedio
Humano Terricola1.4K vistas
Bitácora de base de datos por Lalo Osorio
Bitácora de base de datosBitácora de base de datos
Bitácora de base de datos
Lalo Osorio36.2K vistas
Lenguaje ensamblador basico por Gustavo Davila
Lenguaje ensamblador basicoLenguaje ensamblador basico
Lenguaje ensamblador basico
Gustavo Davila37.8K vistas
24 Ejercicios Subnetting por Patty Vm
24 Ejercicios Subnetting24 Ejercicios Subnetting
24 Ejercicios Subnetting
Patty Vm17.8K vistas
Estructuras de control por ralhum
Estructuras de controlEstructuras de control
Estructuras de control
ralhum18K vistas
Redes II Practica 5 OSPF por Luis Reyes
Redes II Practica 5 OSPFRedes II Practica 5 OSPF
Redes II Practica 5 OSPF
Luis Reyes18.3K vistas
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM por Kamisutra
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
Kamisutra11.6K vistas
Ejercicio de subneteo vlsm y cidr por cesartg65
Ejercicio de subneteo vlsm y cidrEjercicio de subneteo vlsm y cidr
Ejercicio de subneteo vlsm y cidr
cesartg6567.5K vistas
Serie Fibonacci en C por Abraham
Serie Fibonacci en CSerie Fibonacci en C
Serie Fibonacci en C
Abraham55.6K vistas
Las estructuras de control en programación presentacion por Orangel4
Las estructuras de control en programación presentacionLas estructuras de control en programación presentacion
Las estructuras de control en programación presentacion
Orangel4147 vistas

Destacado

Simulacion - Algoritmo congruencial cuadratico por
Simulacion - Algoritmo congruencial cuadraticoSimulacion - Algoritmo congruencial cuadratico
Simulacion - Algoritmo congruencial cuadraticoJosé Antonio Sandoval Acosta
2.8K vistas2 diapositivas
Tema 4.3.1. Actividad 2: Instrumentos de Evaluación por
Tema 4.3.1. Actividad 2: Instrumentos de EvaluaciónTema 4.3.1. Actividad 2: Instrumentos de Evaluación
Tema 4.3.1. Actividad 2: Instrumentos de EvaluaciónJosé Antonio Sandoval Acosta
2.2K vistas3 diapositivas
Estructura de Datos - Estructuras no lineales por
Estructura de Datos - Estructuras no linealesEstructura de Datos - Estructuras no lineales
Estructura de Datos - Estructuras no linealesJosé Antonio Sandoval Acosta
1.7K vistas46 diapositivas
Tópicos Avanzados de Programación - Unidad 5 Programacion movil por
Tópicos Avanzados de Programación - Unidad 5 Programacion movilTópicos Avanzados de Programación - Unidad 5 Programacion movil
Tópicos Avanzados de Programación - Unidad 5 Programacion movilJosé Antonio Sandoval Acosta
2.3K vistas79 diapositivas
Simulación - Algoritmo de productos medios por
Simulación - Algoritmo de productos mediosSimulación - Algoritmo de productos medios
Simulación - Algoritmo de productos mediosJosé Antonio Sandoval Acosta
1.5K vistas3 diapositivas
M2 actividad 2.3 INSTRUMENTACIÓN DIDÁCTICA 2015 por
M2 actividad 2.3 INSTRUMENTACIÓN DIDÁCTICA 2015 M2 actividad 2.3 INSTRUMENTACIÓN DIDÁCTICA 2015
M2 actividad 2.3 INSTRUMENTACIÓN DIDÁCTICA 2015 José Antonio Sandoval Acosta
2.6K vistas18 diapositivas

Destacado(20)

00001 b 1 ing.sistemas f j 2014 mata ito-ac-po-004-08 formato int didact... por Ruber Duck
00001  b   1 ing.sistemas   f j 2014 mata ito-ac-po-004-08 formato int didact...00001  b   1 ing.sistemas   f j 2014 mata ito-ac-po-004-08 formato int didact...
00001 b 1 ing.sistemas f j 2014 mata ito-ac-po-004-08 formato int didact...
Ruber Duck484 vistas
Planificación sobre la reflexión de la luz por ALCIBAR ALMEIDA
Planificación sobre la reflexión de la luzPlanificación sobre la reflexión de la luz
Planificación sobre la reflexión de la luz
ALCIBAR ALMEIDA3.9K vistas
Planificación de clases fibra optica curricula por Aldo Thomas
Planificación de clases fibra optica curriculaPlanificación de clases fibra optica curricula
Planificación de clases fibra optica curricula
Aldo Thomas1.5K vistas

Similar a Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)

08 strings o cadenas por
08 strings o cadenas08 strings o cadenas
08 strings o cadenashorusblom
651 vistas10 diapositivas
!Prograc8 por
!Prograc8!Prograc8
!Prograc8robertoxe
394 vistas10 diapositivas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenas por
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenasTap u2-componentes y librerias-programa para cifrar y descifrar cadenas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenasJosé Antonio Sandoval Acosta
308 vistas6 diapositivas
Guia De Practica 3 por
Guia De Practica 3Guia De Practica 3
Guia De Practica 3louis
335 vistas8 diapositivas
Funciones str por
Funciones strFunciones str
Funciones strSharliemaster
9K vistas50 diapositivas
Sobrecarga de operadores por
Sobrecarga de operadoresSobrecarga de operadores
Sobrecarga de operadoresr0na91
2.7K vistas6 diapositivas

Similar a Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)(20)

08 strings o cadenas por horusblom
08 strings o cadenas08 strings o cadenas
08 strings o cadenas
horusblom651 vistas
!Prograc8 por robertoxe
!Prograc8!Prograc8
!Prograc8
robertoxe394 vistas
Guia De Practica 3 por louis
Guia De Practica 3Guia De Practica 3
Guia De Practica 3
louis335 vistas
Sobrecarga de operadores por r0na91
Sobrecarga de operadoresSobrecarga de operadores
Sobrecarga de operadores
r0na912.7K vistas
Algoritmos y lenjuage de programacion por Ysaac Ruiz
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
Ysaac Ruiz600 vistas
Fundamentos de programación librería string C++ por Milton Nicolay
Fundamentos de programación librería string C++Fundamentos de programación librería string C++
Fundamentos de programación librería string C++
Milton Nicolay13.1K vistas
Funciones C++ por Jarvis_15
Funciones C++Funciones C++
Funciones C++
Jarvis_15556 vistas
Ejercicios programacion cortos por milanollarves
Ejercicios programacion cortosEjercicios programacion cortos
Ejercicios programacion cortos
milanollarves85 vistas
Comandos importantes en c++ por Andy Otañez
Comandos importantes en c++Comandos importantes en c++
Comandos importantes en c++
Andy Otañez8.4K vistas

Más de José Antonio Sandoval Acosta

Aplicaciones móviles intro. por
Aplicaciones móviles intro.Aplicaciones móviles intro.
Aplicaciones móviles intro.José Antonio Sandoval Acosta
4 vistas14 diapositivas
Economia por
EconomiaEconomia
EconomiaJosé Antonio Sandoval Acosta
3 vistas23 diapositivas
ISCA-quimica-Equipo 2.pptx por
ISCA-quimica-Equipo 2.pptxISCA-quimica-Equipo 2.pptx
ISCA-quimica-Equipo 2.pptxJosé Antonio Sandoval Acosta
10 vistas40 diapositivas
Plantilla presentación.pptx por
Plantilla presentación.pptxPlantilla presentación.pptx
Plantilla presentación.pptxJosé Antonio Sandoval Acosta
3 vistas6 diapositivas
kitchenham.pptx por
kitchenham.pptxkitchenham.pptx
kitchenham.pptxJosé Antonio Sandoval Acosta
5 vistas2 diapositivas
Diagrama de Casos de Uso UML por
Diagrama de Casos de Uso UMLDiagrama de Casos de Uso UML
Diagrama de Casos de Uso UMLJosé Antonio Sandoval Acosta
29 vistas21 diapositivas

Más de José Antonio Sandoval Acosta(20)

Último

CE101_ASSESSMENT_ QR_V3 .pdf por
CE101_ASSESSMENT_ QR_V3 .pdfCE101_ASSESSMENT_ QR_V3 .pdf
CE101_ASSESSMENT_ QR_V3 .pdfSebastianQP1
7 vistas1 diapositiva
PERMUTACIONES VARIACIONES COMBINACIONES.pptx.pdf por
PERMUTACIONES VARIACIONES COMBINACIONES.pptx.pdfPERMUTACIONES VARIACIONES COMBINACIONES.pptx.pdf
PERMUTACIONES VARIACIONES COMBINACIONES.pptx.pdffarquinigov1
5 vistas27 diapositivas
Cuadro gestion.pdf por
Cuadro gestion.pdfCuadro gestion.pdf
Cuadro gestion.pdfjesus419518
5 vistas1 diapositiva
EVALUACIÓN 2 MÉTODOS ESTADÏSTICOS.docx por
EVALUACIÓN 2 MÉTODOS ESTADÏSTICOS.docxEVALUACIÓN 2 MÉTODOS ESTADÏSTICOS.docx
EVALUACIÓN 2 MÉTODOS ESTADÏSTICOS.docxmatepura
7 vistas1 diapositiva
MATERIALES Y HERRAMIENTAS PARA INSTALACIONES ELECTRICAS.docx por
MATERIALES Y HERRAMIENTAS PARA INSTALACIONES ELECTRICAS.docxMATERIALES Y HERRAMIENTAS PARA INSTALACIONES ELECTRICAS.docx
MATERIALES Y HERRAMIENTAS PARA INSTALACIONES ELECTRICAS.docxvillacrezja7
7 vistas8 diapositivas
Aplicaciones de los Materiales .docx.pdf por
Aplicaciones de los Materiales .docx.pdfAplicaciones de los Materiales .docx.pdf
Aplicaciones de los Materiales .docx.pdfNaydelinMartinez2
6 vistas25 diapositivas

Último(20)

CE101_ASSESSMENT_ QR_V3 .pdf por SebastianQP1
CE101_ASSESSMENT_ QR_V3 .pdfCE101_ASSESSMENT_ QR_V3 .pdf
CE101_ASSESSMENT_ QR_V3 .pdf
SebastianQP17 vistas
PERMUTACIONES VARIACIONES COMBINACIONES.pptx.pdf por farquinigov1
PERMUTACIONES VARIACIONES COMBINACIONES.pptx.pdfPERMUTACIONES VARIACIONES COMBINACIONES.pptx.pdf
PERMUTACIONES VARIACIONES COMBINACIONES.pptx.pdf
farquinigov15 vistas
EVALUACIÓN 2 MÉTODOS ESTADÏSTICOS.docx por matepura
EVALUACIÓN 2 MÉTODOS ESTADÏSTICOS.docxEVALUACIÓN 2 MÉTODOS ESTADÏSTICOS.docx
EVALUACIÓN 2 MÉTODOS ESTADÏSTICOS.docx
matepura7 vistas
MATERIALES Y HERRAMIENTAS PARA INSTALACIONES ELECTRICAS.docx por villacrezja7
MATERIALES Y HERRAMIENTAS PARA INSTALACIONES ELECTRICAS.docxMATERIALES Y HERRAMIENTAS PARA INSTALACIONES ELECTRICAS.docx
MATERIALES Y HERRAMIENTAS PARA INSTALACIONES ELECTRICAS.docx
villacrezja77 vistas
TAREA_5_CONTABILIDAD.pdf por matepura
TAREA_5_CONTABILIDAD.pdfTAREA_5_CONTABILIDAD.pdf
TAREA_5_CONTABILIDAD.pdf
matepura12 vistas
REGLAMENTO A LEY DE TRANSPORTE TERRESTRE TRANSITO Y SEGURIDAD VIAL.pdf por AinnatHtezil
REGLAMENTO A LEY DE TRANSPORTE TERRESTRE TRANSITO Y SEGURIDAD VIAL.pdfREGLAMENTO A LEY DE TRANSPORTE TERRESTRE TRANSITO Y SEGURIDAD VIAL.pdf
REGLAMENTO A LEY DE TRANSPORTE TERRESTRE TRANSITO Y SEGURIDAD VIAL.pdf
AinnatHtezil6 vistas
Transporte terrestre de materiales y residuos peligrosos por Ramses CF
Transporte terrestre de materiales y residuos peligrososTransporte terrestre de materiales y residuos peligrosos
Transporte terrestre de materiales y residuos peligrosos
Ramses CF8 vistas

Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)

  • 1. Algoritmos básicos para cifrado y descifrado de frases Encriptar y Desencriptar Transposición Inversa El Algoritmo Transposición inversa es el más sencillo de todos, genera una cadena al revés de cómo fue escrita: es decir, si escribimos la palabra PANDA el algoritmo debe regresar ADNAP como cadena cifrada. La forma de descifrarlo es aplicando el mismo método a la cadena cifrada, por lo que requiere la creación de un solo método de programación. Ejemplo de una función que cifra en Transposición Inversa en C# private string cifra_inversa(string cadena) { string inversa = ""; for (int i = cadena.Length - 1; i >= 0; i--) { inversa = inversa + (cadena[i]); } return inversa; }
  • 2. Transposición Binaria La Transposición Binaria al igual que la inversa mueve de su lugar los caracteres de la cadena original, la diferencia radica en que lo hace en pares de caracteres sin tomar en cuenta los demás caracteres de la cadena. Por ejemplo si tecleamos la palabra MEXICO el algoritmo divide la frase en pares de la siguiente forma: ME|XI|CO, e intercambia el contenido de cada par, el carácter de la izquierda lo pone a la derecha y viceversa, al final regresa EMIXOC como frase cifrada. La forma de descifrarlo es aplicando de nuevo el mismo algoritmo por lo que solo requiere crear una rutina en código de programación Ejemplo de una función que cifra en Transposición Binaria en C# private string cifra_binaria(string cadena) { string binaria = ""; int i = 0; while (i < cadena.Length) { if ((i + 1) < cadena.Length) { binaria = binaria + cadena[i + 1].ToString() + cadena[i].ToString(); } else { binaria = binaria + cadena[cadena.Length - 1].ToString(); } i = i + 2; } return binaria; }
  • 3. Algoritmo Incremental El Algoritmo Incremental requiere una clave pública entera. Genera una nueva cadena cifrada sumando carácter por carácter la cantidad capturada en laclavepública al código ASCII de la cadena original. La forma de invertirlo es restando la clave pública, por lo que es posible que requiera dos métodos para hacer la tarea, uno para cifrar y otro para descifrar. Ejemplo de las funciones que cifran y descifran frases con el algoritmo incremental en C#: private string cifra_incrementa(string cadena, int cPub) { char remplaza; string re_incrementa = ""; for (int i = 0; i < cadena.Length; i++) { remplaza = (char)((int)cadena[i] + cPub); re_incrementa = re_incrementa + remplaza.ToString(); } return re_incrementa; } private string des_incrementa(string cadena, int cPub) { char remplaza; string re_incrementa = ""; for (int i = 0; i < cadena.Length; i++) { remplaza = (char)((int)cadena[i] - cPub); re_incrementa = re_incrementa + remplaza.ToString(); } return re_incrementa; }
  • 4. Algoritmo Exponencial El Algoritmo Exponencial tiene mucha similitud con el Algoritmo Incremental, en este caso se pide dos claves numéricas, la clave pública y la clave privada, las cuales son multiplicadas entre sí, una vez que tenemos el resultado dicho número entero se utiliza para sumarlo al código ASCII de cada carácter de la frase que vamos a cifrar, con esto obtenemos al final una nueva frase ya cifrada. La forma de descifrarlo es restando el número que obtuvimos de la multiplicación de las claves, por lo que es posible que se requieran dos métodos de programación, uno para cifrar y otro para descifrar la frase. En este caso las funciones son exactamente las mismas que en el algoritmo incremental, el único cambio es que al capturar las dos claves estas se envían ya multiplicadas en el parámetro numérico de cada función, de esta forma el código es reutilizable. Ejemplo de funciones donde se usa el algoritmo exponencial en C#: // llamado a las funciones enviando las claves y amultiplicadas string cifrado = cifra_incrementa(texto.Text, cPub * cPriv); string descifrado = des_incrementa(cifrado, cPub * cPriv); // Se utilizan las mismas funciones que para el algoritmo incremental private string cifra_incrementa(string cadena, int cPub) { char remplaza; string re_incrementa = ""; for (int i = 0; i < cadena.Length; i++) { remplaza = (char)((int)cadena[i] + cPub); re_incrementa = re_incrementa + remplaza.ToString(); } return re_incrementa; } private string des_incrementa(string cadena, int cPub) { char remplaza; string re_incrementa = ""; for (int i = 0; i < cadena.Length; i++) { remplaza = (char)((int)cadena[i] - cPub); re_incrementa = re_incrementa + remplaza.ToString(); } return re_incrementa; }
  • 5. Algoritmo Exponencial Diferido El algoritmo Exponencial Diferido funciona muy similar al Exponencial con la diferencia que las claves enteras no se multiplican al inicio, la clave privada sirve para referenciar un arreglo en memoria, elcual contiene números enteros en un rango de 1 a 99 (puede seleccionarse otro rango). El usuario en la clave privada debe seleccionar un número entero que se refiere a la posición en el arreglo de la cual extraemos el número que usaremos para multiplicar con la clave pública, una vez que obtenemos el resultado el resto es exactamente igual al algoritmo exponencial. En este caso, antes de llamar las funciones debemos buscar en el arreglo el valor correspondiente a la posición enviada en la clave privada. Para este ejemplo el arreglo es de 20 posiciones. Ejemplo de funciones donde se usa el algoritmo exponencial diferido en C#: byte[] diferido = new byte[20] {3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 19, 21, 25, 27, 31, 35, 58, 46, 55, 59}; clave = diferido[cPriv - 1]; string cifrado = cifra_incrementa(texto.Text, cPub * clave); string descifrado = des_incrementa(cifrado, cPub * clave); // Llamado a las funciones enviando las claves ya multiplicadas // Se utilizan las mismas funciones que para el algoritmo incremental private string cifra_incrementa(string cadena, int cPub) { char remplaza; string re_incrementa = ""; for (int i = 0; i < cadena.Length; i++) { remplaza = (char)((int)cadena[i] + cPub); re_incrementa = re_incrementa + remplaza.ToString(); } return re_incrementa; } private string des_incrementa(string cadena, int cPub) { char remplaza; string re_incrementa = ""; for (int i = 0; i < cadena.Length; i++) { remplaza = (char)((int)cadena[i] - cPub); re_incrementa = re_incrementa + remplaza.ToString(); } return re_incrementa; }
  • 6. Algoritmos Mixtos Es posible crear algoritmos mixtos combinando dos o más de los mencionados anteriormente, por lo que el código fuente requiere tantos métodos sean necesarios para cifrar y descifrar. Es recomendable que al combinar dos o más algoritmos para cifrar frases primero apliquemos el más sencillo y después sobre la frase resultante aplicamos el de mayor complejidad. Para descifrar por medio de algoritmos mixtos solo debemos aplicar los algoritmos en orden inverso a como se usaron en el cifrado. Notas: Es necesario ser prudente al momento de seleccionar los números enteros que utilizaremos para las multiplicaciones ya que de ser números muy grandes el resultado será un valor demasiado alto que puede ocasionar problemas de procesamiento, lo cual no está contemplado en el código de ejemplo mostrado en cada algoritmo. ----------------- Mtro. José Antonio Sandoval Acosta. Docente de Ingeniería en Sistemas Computacionales. México. 18 de marzo de 2017.