Matlab - Encriptado afin

 
Vista:
sin imagen de perfil

Encriptado afin

Publicado por Fernado (6 intervenciones) el 16/01/2017 17:43:36
Hola buenas, estoy realizando un trabajo sobre encriptacion mediante el método afín y he elaborado el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
clc;
clear all;
x=input('INGRESAR PALABRA A ENCRIPTAR: ','s');
a=input('INGRESE CLAVE A: ');
b=input('INGRESE CLAVE B: ');
t=input('ELIJA UNA OPCION DEL MENÚ: ');
 
switch t
    case 1
        h=((a*x+b)-a*97);
        e=mod(h,27);
        f=(e+97);
        g=char(f);
        disp('SU CODIFICACIÓN ES: ');
        disp(g)
 
    case 2
 
        i=((a*x-b)-a*97);
        j=mod(i,27);
        k=(j+97);
        l=char(k);
        disp('SU MENSAJE ES: ');
        disp(l)
 
    otherwise
        disp('FUNCIÓN NO ENCONTRADA')
end

Pero tiene dos grandes problemas. El primero es que, como sabran, la funcion del metodo afin es f=a*x+b. Pues bien, cuando yo al parámetro 'a' le doy el valor 1 y al parámetro 'b' le doy cualquier valor me encripta y desencripta el mensaje sin ningún problema pero al dale cualquier otro valor a la variable 'a' ya no funciona de manera correcta.
El segundo problema es la letra ñ. Me gustaría poder encriptarla y desencriptarlar pero no he sido capaz de dar con la manera de hacerlo.

Espero que me puedan echar una mano.
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Encriptado afin

Publicado por Royeth (1818 intervenciones) el 16/01/2017 18:15:54
bueno hay una solución para la ñ que es dada en métodos de encriptación cuando el mensaje a codificar es simplemente las letras del alfabeto que consiste en colocar la letra ñ de último como el carácter { que representa el carácter 123 , entonces lo que debes hacer es reemplazar esa ñ por ese carácter y en el caso contrario el 243 por el número 123, en matlab esto resulta muy fácil :

1
2
a=input('Ingrese la Opcion: ','s');
a(a=='ñ')='{';

aquí ya estás reemplazando la ñ por { que sería el carácter que viene después de la z , tendrías los carácteres del 97 al 123 , el caso es que el método que tienes programado funciona bien con el desfase que es b , pero la pendiente que es a te va a cambiar la encriptación que tienes ya que el modulo de un producto te produce un desfase , en otras palabras el modulo del producto a con x te va a cambiar el valor de b y por eso no funciona adecuadamente.

espero te sea de ayuda
https://www.facebook.com/royethmatlab/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Encriptado afin

Publicado por Fernado (6 intervenciones) el 16/01/2017 19:36:02
Entonces, ¿que me recomiendas para solucionar el problema de la mala encriptacion? Porque no consigo dar la tecla del asunto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Encriptado afin

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 17/01/2017 18:42:01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
clear all
%aritmetica modular
%a=b(mod-m) 
% CODIGO CESAR
% Y Z A B C E D E F   
% Y Z A B C D E F G
% Y Z A B C D E F G
%A=C, B=D, C=E
 
%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
%0 1 2 3 4 5 6 7 8 9  10 11 12  13 14 15 16 17 18 19 20 21 22 23 24 25 26  
% c(x)= x+3(mod 27)
% x es la letra a cifrar y C(x) la letra cifrada en su posicion
%formula descifrado  C^-1(x)=(x-3)(mod 27)
%cifrado afin  C(a,b)(x)=(ax+b)( mod n)
% (a,b) son mayores de 1 por mayor seguridad y MCD(a,n)=1
%cifremos la palabra LIBRO
%clave (2,3)  a=2, b=3;  n=27
%MCD(2,27)=1,   c(x)=2x+3(mod27)  
%  A  B  C  D  E  F  G  H  I  J  K  L  M   Ñ
%  0  1  2  3  4  5  6  7  8  9  10 11 12  13
 
%  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
%  14 15 16 17 18 19 20 21 22 23 24 25 26
 
%L=11   C(x)=( 2(11)+3)(mod27)=25(mod 27)=25=Y
%I=8    C(x)=( 2(8)+ 3)(mod27)=19(mod 27)=19=S
%B=1    C(x)=( 2(1)+ 3)(mod27)=5(mod 27)= 5=F
%R=18   C(x)=( 2(18)+3)(mod27)=39(mod 27)=12=M
%O=15   C(x)=( 2(15)+3)(mod27)=33(mod 27)=6=G
%LIBRO==YSFMG
clear all
L='ABCDEFGHIJKLMÑNOPQRSTUVWXYZ';
N=0:26;
a=2; b=3; n=length(N);
P='LIBRO'
for i=1:length(P)
    for j=1:length(L)
        if P(i)==L(j)
            x(i)=N(j);
            nn(i)=a*x(i)+b;
            l(i)=mod(nn(i),n);
           C(i)=L(l(i)+1);
        end
    end
end
 
encriptado=C

1
2
3
4
5
6
7
8
9
10
>> codigo_afin1
 
P =
 
LIBRO
 
 
encriptado =
 
YSFMG



Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Encriptado afin

Publicado por Fernado (6 intervenciones) el 17/01/2017 19:25:36
La verdad no se me había ocurrido solucionarlo de esta manera. ¿Para desencriptarlo como seria? Tendría que calcular el inverso del modulo para deshacerlo ¿no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar