was Python-Paket für RSA-Algorithmus
-
02-10-2019 - |
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).
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