Este cifrado soluciona la
debilidad del cifrado del César en que una letra se cifra siempre igual. Se usa
una clave K de longitud L y se cifra carácter a carácter sumando módulo n el
texto en claro con los elementos de esta clave.
Implementación:
#include < iostream > #include < cstdlib > #include < string.h > #include < conio.h > using namespace std; string alfabeto = "abcdefghijklmnopqrstuvwxyz"; void encriptardoVigenere (){ string texto, clave, encriptar; cout < < "\n\n\t INGRESE TEXTO(SIN ESPACIO): ";cin > > texto; cout < < "\n\n\t INGRESE CLAVE: ";cin > > clave; int tamtexto = texto.size(); int tamclave = clave.size(); int postexto , posclave; if ( tamtexto > tamclave){ for ( int i = 0; i < texto.size(); i++){ clave += clave [i]; //cout < < " " < < clave [i]; } for ( int i = 0; i < texto.size(); i++){ postexto = alfabeto.find(texto[i]); posclave = alfabeto.find(clave[i]); encriptar += alfabeto[(postexto + posclave)%26]; } }else { for ( int i = 0; i < texto.size(); i++){ postexto = alfabeto.find(texto[i]); posclave = alfabeto.find(clave[i]); encriptar += alfabeto[(postexto + posclave)%26]; } } // mostrar texto encriptado cout < < "\n\n\t TEXTO ENCRIPTADO: "; for (int i = 0 ; i < texto.size() ; i++){ cout < < encriptar[i]; } } void desencriptar(){ string texto, clave, desencriptar; int resultado; cout < < "\n\n\t INGRESE TEXTO(SIN ESPACIO): ";cin > > texto; cout < < "\n\n\t INGRESE CLAVE: ";cin > > clave; int tamtexto = texto.size(); int tamclave = clave.size(); int postexto , posclave; if ( tamtexto > tamclave){ for ( int i = 0; i < texto.size(); i++){ clave += clave [i]; //cout < < " " < < clave [i]; } for ( int i = 0; i < texto.size(); i++){ postexto = alfabeto.find(texto[i]); posclave = alfabeto.find(clave[i]); resultado = postexto - posclave; if ( resultado < 0){ resultado = 26 + resultado; desencriptar += alfabeto[resultado%26]; } else{ desencriptar += alfabeto[resultado%26]; } } }else { for ( int i = 0; i < texto.size(); i++){ postexto = alfabeto.find(texto[i]); posclave = alfabeto.find(clave[i]); resultado = postexto - posclave; if ( resultado < 0){ resultado = 26 + resultado; desencriptar += alfabeto[resultado%26]; } else{ desencriptar += alfabeto[resultado%26]; } } } cout < < "\n\n\t TEXTO DESENCRIPTADO: "; for (int i = 0 ; i < texto.size() ; i++){ cout < < desencriptar[i]; } } int main (void) { string alfabeto = "abcdefghijklmnopqrstuvwxyz"; int opcion; cout < < "\n\n\t\t CIFRADO DE VIGENERE"; cout < < endl; cout < < endl; cout < < "1. ENCRIPTAR "; cout < < endl; cout < < "2. DESENCRIPTAR"; cout < < endl; cout < < endl; cout < < "INGRESAR OPCION: "; cin > > opcion; switch(opcion) { case 1: { encriptardoVigenere (); getch(); break; } case 2: { desencriptar(); getch(); break; } system("pause"); } }
0 comentarios: