Este documento descreve um algoritmo criptográfico que cifra um texto usando uma matriz chave. O algoritmo gera uma matriz chave com base em uma string de entrada do usuário e usa essa matriz para cifrar o texto em uma matriz de saída codificada. Ele também mostra como recuperar a chave original a partir da matriz codificada do texto.
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
Codigo hill claves (yango colmenares)
1. Instituto Politécnico Nacional
Introducción a los Sistemas de Comunicación Seguros
Unidad MISTI Culhuacan
Presentado a: Dr. Gualberto Aguilar Torres
Tarea
3 Por: Yango Alexander Colmenares 26 de agosto de 2013
% INSTITUTO POLITECNICO NACIONAL-MISTI CULHUACAN --- MEXICO DF 2013
% Estudiante: YANGO ALEXANDER COLMENARES
function cifrar_texto()
clc;
clearvars;
abecedario = {'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'};
fid = fopen('texto.txt','rt');
texto = textscan(fid,'%s','Delimiter','n');
texto = texto{1,1}{1,1};
texto = lower(texto);
texto= regexp(texto, 'w {0,1}', 'match');
matriz = cadena_valor(texto);
prompt = 'Ingrese su llave Ejem Tenga criterios de calidadn';
llave = input(prompt,'s');
llave = regexp(llave, 'w {0,1}', 'match');
2. llave = cadena_valor(llave);
conta = 1;
while(true)
if(conta*conta == length(llave))
c = true;
break;
end
if(conta*conta > length(llave))
c = false;
restante = conta*conta;
break;
end
conta = conta+1;
end
if(c == true)
fprintf('Longitud de la llave correcta n');
l = sqrt(length(llave));
conta_2 = 1;
tam_texto = size(texto);
ancho = tam_texto(2);
3. for i=1:l
for j=1:l
llave_matriz(i,j) = llave(conta_2);
conta_2 = conta_2+1;
end
end
determinante = mod(det(llave_matriz),27);
determinante = round(determinante);
tam_llave = length(llave_matriz);
if(mod(ancho,tam_llave) ~= 0)
while(mod(ancho,tam_llave) ~= 0)
ancho = ancho+1;
matriz(1,ancho) = 0;
end
end
conta_uno = 1;
conta_dos =0;
4. for j=1:ancho
matriz_aux(conta_uno,1) = matriz(1,j);
conta_uno = conta_uno+1;
if(conta_uno > tam_llave)
conta_uno = 1;
multiplica = mod(llave_matriz*matriz_aux,27);
for k=1:tam_llave
conta_dos = conta_dos+1;
texto_cifrado(1,conta_dos) = multiplica(k,1);
end
end
end
fprintf('Texto cifrado :n');
texto_cifrado_letra = matriz_letra(texto_cifrado)
if(gcd(determinante,length(abecedario)) == 1)
cnt = 1;
while(true)
if(mod(determinante*cnt,27) == 1)
determinante_inverso = mod(cnt,27);
break;
end
cnt = cnt+1;
end
llave_inversa = llave_inv(llave_matriz,determinante_inverso);
5. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%BUSCAR LA
LLAVE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%
t = 0;
c = 0;
contador_aux1 = 1;
determinante_nuevo1 = 0;
while(gcd(determinante_nuevo1,27) ~= 1)
t = recursivo_encuentra(matriz,tam_llave,contador_aux1);
c = recursivo_encuentra(texto_cifrado,tam_llave,contador_aux1);
determinante_nuevo1 = mod(det(t),27);
determinante_nuevo1 = round(determinante_nuevo1);
contador_aux1 = contador_aux1+(tam_llave*tam_llave);
end
c = transpose(c);
t = transpose(t);
determinante_t = mod(det(t),27);
determinante_t = round(determinante_t);
cn = 1;
while(true)
if(mod(determinante_t*cn,27) == 1)
determinante_inverso_t = mod(cn,27);
6. break;
end
cn = cn+1;
end
fprintf('La matriz de texto cifrado es: n');
c
fprintf('La matriz de texto plano inverso es: n');
t_inverso = llave_inv(t,determinante_inverso_t)
fprintf('La llave original es: n');
llave_original = mod(c*t_inverso,27)
llave_original_texto = matriz_letra(round(llave_original))
else
fprintf('su determinante no es coprimo de la longitud del alfabeto ingrese uno nuevo n');
end
else
fprintf('Ingresa mas caracteres %d valores más para generar una matriz %d X %d n',(restante -
length(llave)),restante,restante);
end
end