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).

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top