导入rsa对文本加密的python实现可以输入npqe和d
以下是RSA加密的Python实现:
import random
import math
def is_prime(n):
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i+2) == 0:
return False
i += 6
return True
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
def multiplicative_inverse(e, phi):
def gcd_extended(a, b):
if a == 0:
return (b, 0, 1)
else:
gcd, x, y = gcd_extended(b % a, a)
return (gcd, y - (b // a) * x, x)
gcd, x, y = gcd_extended(e, phi)
if gcd != 1:
return None
else:
return x % phi
def generate_keypair(p, q):
if not (is_prime(p) and is_prime(q)):
raise ValueError("Both numbers must be prime.")
elif p == q:
raise ValueError("p and q cannot be equal.")
n = p * q
phi = (p-1) * (q-1)
e = random.randrange(1, phi)
g = gcd(e, phi)
while g != 1:
e = random.randrange(1, phi)
g = gcd(e, phi)
d = multiplicative_inverse(e, phi)
return (n, e, d)
def encrypt(plaintext, n, e):
cipher = [pow(ord(char), e, n) for char in plaintext]
return cipher
def decrypt(ciphertext, n, d):
plain = [chr(pow(char, d, n)) for char in ciphertext]
return ''.join(plain)
if __name__ == '__main__':
p = int(input("Enter a prime number (p): "))
q = int(input("Enter another prime number (q): "))
e = int(input("Enter a number (e) for encryption: "))
n, _, d = generate_keypair(p, q)
print("Public key (n, e): ({}, {})".format(n, e))
print("Private key (n, d): ({}, {})".format(n, d))
plaintext = input("Enter a message to encrypt: ")
ciphertext = encrypt(plaintext, n, e)
print("Encrypted message: ", ''.join(map(str,ciphertext)))
decrypted = decrypt(ciphertext, n, d)
print("Decrypted message: ", decrypted)
在这个实现中,我们首先定义了一些辅助函数,如判断素数、求最大公约数、求模反元素等。然后,我们实现了生成密钥对、加密和解密函数。
在主程序中,我们首先让用户输入两个素数 p 和 q,以及一个用于加密的公钥 e。然后,我们使用 generate_keypair 函数生成 RSA 密钥对,并输出公钥和私钥。接着,我们让用户输入要加密的文本,使用 encrypt 函数加密,再使用 decrypt 函数解密,最终输出解密后的明文。
需要注意的是,这个实现中加密和解密的时候,我们使用了一些 Python 的内置函数,比如 pow、ord 和 chr。其中,pow(x, y, z) 表示计算 x 的 y 次方对 z 取模的结果。ord(char) 表示获取字符 char 的 ASCII 码值。chr(n) 表示获取 ASCII 码值为 n 的字符
原文地址: https://www.cveoy.top/t/topic/f2pO 著作权归作者所有。请勿转载和采集!