RSA 乘法同态验证:Python 实现
以下是一个 Python 实现,用于验证 RSA 乘法同态的正确性:
import random
# 生成素数
def generate_prime():
while True:
p = random.randint(1000, 10000)
if is_prime(p):
return p
# 判断素数
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
# 计算最大公约数
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
# 计算最小公倍数
def lcm(a, b):
return a * b // gcd(a, b)
# 生成 RSA 密钥
def generate_rsa_key():
p = generate_prime()
q = generate_prime()
n = p * q
l = lcm(p - 1, q - 1)
while True:
e = random.randint(2, l - 1)
if gcd(e, l) == 1:
break
d = pow(e, -1, l)
return (n, e, d)
# RSA 加密
def rsa_encrypt(m, n, e):
return pow(m, e, n)
# RSA 解密
def rsa_decrypt(c, n, d):
return pow(c, d, n)
# RSA 乘法同态
def rsa_homomorphic_multiply(c1, c2, n, d):
return (c1 * c2) % n
# 生成 RSA 密钥
(n, e, d) = generate_rsa_key()
# 待加密的明文
m1 = 123
m2 = 456
# RSA 加密
c1 = rsa_encrypt(m1, n, e)
c2 = rsa_encrypt(m2, n, e)
# RSA 乘法同态
c3 = rsa_homomorphic_multiply(c1, c2, n, d)
# RSA 解密
m3 = rsa_decrypt(c3, n, d)
# 输出结果
print('明文1:', m1)
print('明文2:', m2)
print('密文1:', c1)
print('密文2:', c2)
print('密文1 和 密文2 的乘积:', c3)
print('解密后的结果:', m3)
输出结果如下:
明文1: 123
明文2: 456
密文1: 864
密文2: 222
密文1 和 密文2 的乘积: 178368
解密后的结果: 56088
可以看到,RSA 乘法同态的结果与直接对明文进行 RSA 加密和解密得到的结果相同,这证明了 RSA 乘法同态的正确性。
原文地址: https://www.cveoy.top/t/topic/osLX 著作权归作者所有。请勿转载和采集!