Frage

suchen RSA-Verschlüsselung auf eine kurze Zeichenfolge in Python zu tun. Dies ist für ein Stück von Benutzerdaten, dass ich zu speichern möchten, ohne Mitarbeiter (inkl ich) es in der Lage zu sehen. Der private Schlüssel auf einem thumbdrive in meinem Safe sein wird, wenn wir eine Vorladung erhalten.

meine Frage: gibt es ein 'wahrscheinlich richtig' Python-Paket für die asymmetrische-Schlüssel RSA? Werde ich sicherer sein, eine C-Bibliothek zu verwenden (wenn ja, welche).

War es hilfreich?

Lösung

Die Verschlüsselung von kurzen Strings mit RSA kann problematisch sein. Es gibt bestimmte Stücke von Daten, die Sie mit RSA verschlüsseln können, die Einzelheiten über Ihren privaten Schlüssel zu offenbaren. In Ihrem Fall wird es wohl in Ordnung sein, da es dunkel genug sein wird, Ihre Mitarbeiter werden es nicht herausgefunden. Aber im allgemeinen Fall mit einem erfahrenen und / oder finanziell gut ausgestatteten Gegnern, die Sie nicht wollen RSA verwenden, um direkt Daten verschlüsseln, wenn Sie feststellen, dass Daten wollen geheim gehalten werden.

würde ich empfehlen, nur mit gnupg statt. Es ist gelöst all diese Probleme für Sie.

Andere Tipps

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top