Búscalo aquí:

Operaciones con módulos: el módulo inverso y potencia modular

Los algoritmos de cifrado, para obtener mayor eficiencia en sus operaciones, realizan operaciones modulares, siendo las más comunes la de encontrar el módulo inverso y encontrar la potencia (exponenciación) modular. El módulo inverso consiste en determinar si un determinado número entero bajo un determinado módulo tiene o no, inversa; mientras que la exponenciación modular es una operación que permite encontrar la potencia de un determinado entero elevado a una potencia k en un determinado módulo.


El código en Java para calcular el inverso multiplicativo (a^(-1))( mod n) es el siguiente:

  1. private static long inv = 0;
  2. /*
  3. * Procedimiento que calcula el módulo inverso: (a^-1)( mod n)
  4. * pero devuelve false, si no existe el inverso o true en caso
  5. * contrario.
  6. * Si el valor del inverso es calculado, entonces es almacenado
  7. * en la variable global inv
  8. **/
  9. public static boolean moduloInverso(long a, long n)
  10. {
  11. long[] resp = new long[3];
  12. resp = euclidesExtendido(a,n);
  13. if(resp[0]>1)
  14. return false;
  15. else
  16. {
  17. if(resp[1]<0)
  18. inv = resp[1]+n;
  19. else
  20. inv = resp[1];
  21. return true;
  22. }
  23. }

La función móduloInverso() hace uso del algoritmo de euclides extendido presentado en el post Algoritmo de Euclides Extendido [código].

El código en Java para calcular la exponenciación modular (a^(k))( mod n) haciendo uso del algoritmo del cuadrado y multiplicación repetida, es el siguiente:
-->
  1. /*
  2. * exponenciación modular (a^k)(mod n)
  3. * algoritmo del cuadrado y multiplicación repetida
  4. *
  5. **/
  6. public static long exponenciacionModular(long a, double k, long n)
  7. {
  8. long b = 1;
  9. if(k==0)
  10. return b;
  11. long A = a;
  12. if(k%2==1)
  13. b = a;
  14. while((k = k/2)!=0)
  15. {
  16. A = (A*A)%n;
  17. if(k%2==1)
  18. b=(A*b)%n;
  19. }
  20. return b;
  21. }

-->Espero les sea de utilidad, saludos :D



Quieres leer más post como éste???...suscribete aquí!!!


4 comentarios:

  1. gracias, en verdad fue de utilidad :D

    ResponderEliminar
  2. eres un dios¡¡

    llevo un año parado en un proyecto porque estba haciendo mal el inverso modular y gracias a ti ha arrancado

    MUCHISIMAS GRACIAS DE VERDAD

    ResponderEliminar
  3. no es para tanto...estoy seguro que tu tambien lo hibieses podido programar

    ResponderEliminar
  4. Gracias Jorge, con sus algoritmos pude completar el codigo de un trabajo, porque me faltaba el modulo inverso y no lo encontraba por ningun lado

    ResponderEliminar

Bienvenido a jcGeorge's Blog!!!

Por favor deja tu comentario, consulta o sugerencia, procura mantener habilitado tu perfil de Blogger o deja un enlace a tu blog o web.

Gracias por leer este blog!!!

Related Posts Plugin for WordPress, Blogger...