qué paquete de Python para algoritmo RSA
-
02-10-2019 - |
Pregunta
buscando hacer cifrado RSA en una corta cadena en Python. Esto es para una parte de los datos de usuario que desea almacenar sin que el personal (incluido yo mismo) siendo capaz de verlo. La clave privada será en un dispositivo en miniatura en mi caja de seguridad para cuando nos citamos.
mi pregunta: ¿hay un paquete python 'probablemente correcta' para RSA asimétrica de clave? ¿Voy a estar más seguro de usar una biblioteca C (si es así cuál).
Solución
El cifrado de cadenas cortas con RSA puede ser problemático. Hay ciertas piezas de datos se puede cifrar con RSA que revelan detalles sobre su clave privada. En su caso probablemente será muy bien, ya que será lo suficientemente oscura que su personal no dará cuenta de ello. Pero en el caso general, con un adversario bien informado y / o bien financiado, usted no desea utilizar RSA para cifrar los datos directamente si desea que los datos sean secreto guardado.
Yo recomendaría usar sólo GnuPG lugar. Se resuelve todos esos problemas para usted.
Otros consejos
def gcd (a, b):
"Compute GCD of two numbers"
if b == 0: return a
else: return gcd(b, a % b)
def multiplicative_inverse(a, b):
""" Find multiplicative inverse of a modulo b (a > b)
using Extended Euclidean Algorithm """
origA = a
X = 0
prevX = 1
Y = 1
prevY = 0
while b != 0:
temp = b
quotient = a/b
b = a % b
a = temp
temp = X
a = prevX - quotient * X
prevX = temp
temp = Y
Y = prevY - quotient * Y
prevY = temp
return origA + prevY
def generateRSAKeys(p, q):
"Generate RSA Public and Private Keys from prime numbers p & q"
n = p * q
m = (p - 1) * (q - 1)
# Generate a number e so that gcd(n, e) = 1, start with e = 3
e = 3
while 1:
if gcd(m, e) == 1: break
else: e = e + 2
d = multiplicative_inverse(m, e)
# Return a tuple of public and private keys
return ((n,e), (n,d))
if __name__ == "__main__":
print "RSA Encryption algorithm...."
p = long(raw_input("Enter the value of p (prime number):"))
q = long(raw_input("Enter the value of q (prime number):"))
print "Generating public and private keys...."
(publickey, privatekey) = generateRSAKeys(p, q)
print "Public Key (n, e) =", publickey
print "Private Key (n, d) =", privatekey
n, e = publickey
n, d = privatekey
input_num = long(raw_input("Enter a number to be encrypted:"))
encrypted_num = (input_num ** e) % n
print "Encrypted number using public key =", encrypted_num
decrypted_num = encrypted_num ** d % n
print "Decrypted (Original) number using private key =", decrypted_num