todas para modulos lista librerias libreria las instalar importar descargar clases python cryptography rsa modulo wolframalpha

para - El resultado del módulo Python difiere del wolfram alpha



modulos python 3 (4)

Cuando ejecuto mi programa python 3:

exp = 211 p = 199 q = 337 d = (exp ** (-1)) % ((p - 1)*(q - 1))

resultados en 211 ^ (- 1).

Pero cuando ejecuto el cálculo en wolfram alpha obtengo el resultado que esperaba.

Hice algunos resultados de prueba y las variables exp , q en el programa son todos los valores enteros que utilicé en wolfram alpha.

Mi objetivo es derivar una clave privada de un entero (débilmente) encriptado. Si pruebo mi resultado de wolfram alpha, puedo descifrar el mensaje encriptado correctamente.


Creo que la idea aquí es que wolfram alpha y python definen el funcionamiento del módulo de manera diferente dependiendo del hecho de que se trate de enteros o números reales. En este caso, Wolfram Alpha está utilizando el módulo inverso porque detecta que el primer número es 0 <x <1

Más información sobre la definición de números reales aquí


Python evalúa inmediatamente (211 ^ (- 1) se calcula como 0.004739 ... y no ekpt como 1/211) y el resto modular de Euclidan para xey está definido conventualmente como x-floor(x/y)*y si hay de x , y es un número racional. Si hace su cálculo con algún programa teórico de números dedicado como, por ejemplo: GP / Pari

ep = 211;p = 199;q = 337;(ep ^ (-1)) % ((p - 1)*(q - 1))

obtendrás el resultado que esperabas obtener porque a) mantiene las fracciones como fracciones el mayor tiempo posible yb) conoce la aritmética modular.

¿Es usted como Python? Puede echar un vistazo a los programas y bibliotecas que se ofrecen en SciPy . SymPy podría ser lo que estás buscando.


Wolfram Alpha está calculando el inverso modular . Es decir, está encontrando el entero x tal que

exp*x == 1 mod (p - 1)*(q - 1)

Esto no es lo mismo que el operador de módulo % . Aquí, Python simplemente calcula el resto cuando 1/exp se divide por (p - 1)*(q - 1) cuando se le da la expresión en su pregunta.

Copiando el código de Python de esta respuesta , puede calcular el valor deseado con Python también:

>>> modinv(exp, (p - 1)*(q - 1)) 45403


Wolfram Alpha no tiene una sintaxis bien definida. Se necesita texto arbitrario que proporcione e intente descubrir a qué se refería con esa información. En este caso, decidió que probablemente buscaba una inversa modular, y le dio una.

Python tiene una sintaxis bien definida. En Python, el analizador no toma el ** y el % juntos y adivina que esa combinación hace que los dos operadores tengan un significado distinto a su significado habitual. El ** se calcula de la manera habitual, y luego % es el operador del módulo. Si quieres una inversión modular, tendrás que escribir una tú mismo.