¿problema con la criptografia, aritmetica modular.?

resulta que estoy estudiando criptografia con la aritmetica modular.

tengo las letras de la A a la Z numeradas del 1 al 26.

segun lo que vi en internet, la mejor forma es multiplicar (o sumar, dividir, restar etc.) cada letra a codificar por un numero aleatorio, por lo cual, multiplico el valor de "S" que es 20, por 3.

s = 20

20*3 = 60

pero lo que yo quiero es que ese 60 sea un numero menor o igual a 26 para poder reemplazar a 60 por una letra diferente, de aqui la aritmetica modular:

60 mod 26 = 8.

pero luego cuando vaya a decodificar el mensaje, como se yo que 8 lo puedo convertir en 20, sabiendo que:

34 mod 26 = 8

osea, da el mismo resultado, como se yo si ese numero es 34 o 60?. segun lo que he pensado hasta el momento, me surgio la teoria de que si divido ese 34 por 3 (34/3), no me dara un numero entero sino decimal, pero quiero saber si en todos los casos se cumple esto o tengo que hacerlo de otra forma, para convertir ese 60 (o cualquier otro numero mayor a 26) en otro menor a 26 gracias por leer.

1 respuesta

Calificación
  • hace 10 años
    Mejor Respuesta

    Bien, ese es un problema clásico al querer encriptar (codificar) datos. Ciertos algoritmos son un camino de ida, pero no de vuelta.

    Es como decir: Tengo 2 numeros, para hacer 1 solo numero los sumo, ej tengo 2 y 3, los sumo y tengo el 5, pero después querés volver a tener 2 numeros a partir de uno solo... y cuales son esos numeros??: 0+5, 1+4, 2+3, ...? Dado que todos ellos suman 5.

    Tendrías que fijarte de crear alguna funcion matematica (llamemosle F), de manera que para codificar un numero A, aplicás F(A), y obtenes B, y luego para decodificar, aplicar INV_F(B) para obtener A nuevamente. (Llámese INV_F a la función inversa de F)

    Vos querés, en este caso en particular, una funcion F cuyos valores de entrada y de salida (es decir, dominio e imagen) caigan en el rango [1-26]

    Que tal esto?:

    y = 27-x --> F(X) = 27-X

    Luego, para encontrar la funcion inversa despejamos la ecuación en términos de la otra variable:

    y+x = 27

    x = 27-y --> INV_F(Y) = 27-Y

    Entonces, para codificar:

    Si A=1 --> F(A) = F(1) = 26 = Z

    Si B=2 --> F(B) = F(2) = 25 = Y

    Luego, para decodificar:

    Si Z=26 --> INV_F(Z) = INV_F(26) = 1 = A

    Si Y=25 --> INV_F(Y) = INV_F(25) = 2 = B

    IMPORTANTE!!

    Si realmente es NECESARIO utilizar la función módulo para encriptar/desencriptar, entonces podés usar la Función del César:

    El Código de César dice que se asigna a cada letra (de la A a la Z, incluyendo Ñ) un número (de 1 a 26 y 0), así:

    a=1

    b=2

    c=3

    d=4

    e=5

    f=6

    g=7

    h=8

    i=9

    j=10

    k=11

    l=12

    m=13

    n=14

    ñ=15

    o=16

    p=17

    q=18

    r=19

    s=20

    t=21

    u=22

    v=23

    w=24

    x=25

    y=26

    z=0

    F(X) = (X+3) mod 27

    INV_F(Y) = (Y+24) mod 27

    Ejemplo:

    --------

    Encripto:

    MAYO --> 13.1.26.16 ---[(X+3) mod 27]---> 16.4.2.19 --> ODBR

    Desencripto:

    ODBR --> 16.4.2.19 ---[(X+24) mod 27]---> 13.1.26.16 --> MAYO

    Por si te quedaron dudas, se puede demostrar que INV_F es inversa de F. Sabiendo que si a un numero X le aplico F y luego le aplico INV_F entonces obtengo X nuevamente.

    Demostracion:

    INV_F( F(X) ) mod 27 =

    INV_F( X+3 ) mod 27 =

    [(X+3)+24] mod 27 =

    (X+27) mod 27 = X

    Verificación:

    (X+27) mod 27 = X

    1 + 27 = 28 -> 28 mod 27 = 1

    2 + 27 = 29 -> 29 mod 27 = 2

    3 + 27 = 30 -> 30 mod 27 = 3

    ...

    Espero que te siva de ayuda.

    Saludos desde Argentina,

    Leo.

    Fuente(s): Mis conocimientos Criptografía y Aritmética Modular (descargable en: http://foro.portalhacker.net/index.php/topic,67396...
¿Aún tienes preguntas? Pregunta ahora para obtener respuestas.