以下是一个 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 乘法同态的正确性。

RSA 乘法同态验证:Python 实现

原文地址: https://www.cveoy.top/t/topic/osLX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录