Python 为什么此RSA keygen/encryption函数返回原始消息进行加密,返回大量数字进行解密?

Python 为什么此RSA keygen/encryption函数返回原始消息进行加密,返回大量数字进行解密?,python,cryptography,rsa,Python,Cryptography,Rsa,我正在尝试创建自己的RSA加密函数,但结果不是我想要的 我已经测试了外部模块的lcm、gcd、指数平方、模乘逆和素性测试。我跟着 我已经创建了有效的素数digest1和digest2。我检查了一下,以确保它们是最好的。它们也非常大 n=digest1*digest2 tn=lcm.lcm(digest1-1,digest2-1) #totient of n for e in range(start,1000000000000000000000): #a large number for

我正在尝试创建自己的RSA加密函数,但结果不是我想要的

我已经测试了外部模块的lcm、gcd、指数平方、模乘逆和素性测试。我跟着

我已经创建了有效的素数digest1和digest2。我检查了一下,以确保它们是最好的。它们也非常大

n=digest1*digest2
tn=lcm.lcm(digest1-1,digest2-1)
#totient of n
for e in range(start,1000000000000000000000):
    #a large number for coprime to tn
    if math.gcd(e,tn)==1.0:
        d=modularminverse.modInverse(e,tn)
        if len(str(d))<200:
            #for small e
            break
n=int(n)
e=int(e)
d=int(d)
publickey=(n,e)
privatekey=(n,d)
return (publickey, privatekey)

在这里,外部函数名表示它们的用法,例如fastpower。fast_power是模的幂

我希望结果是一个很长的数字,然后是101,但当start=10000000时,它会给出如下结果:

101 1943008535967955120523586573083029590205525296762738846635163198694583263534205798969513078123593423495111396012981134976675110289386899055434926395107114


这是向后的。当start=100000000000000或足够大的数字时,encryptmessage和decryptmessage都将变为一个大数字。

“将乘积的Carmichael ToClient函数计算为λ(n)=lcm(p− 1,q− 1) 如果d太大,加密就太贵了。我之前的评论是错误的。但还是很难弄清楚你的问题是什么。您的输出与您的程序不匹配。d和e不能同时变小。@JamesKPolk好的,但撇开过滤器不谈,我想解决输出不是我想要的结果的问题。可能有帮助如果没有缺少的片段,例如
fast\u power
modInverse
等,就不可能复制。请参见“将产品的Carmichael Toticent函数计算为λ(n)=lcm(p− 1,q− 1) 如果d太大,加密就太贵了。我之前的评论是错误的。但还是很难弄清楚你的问题是什么。您的输出与您的程序不匹配。d和e不能同时变小。@JamesKPolk好的,但撇开过滤器不谈,我想解决输出不是我想要的结果的问题。可能有帮助如果没有缺少的片段,例如
fast\u power
modInverse
等,就无法复制。请参阅。
keys=None
while keys == None:
    keys=rsa()
print(keys)
encryptmessage=fastpower.fast_power(101,keys[0][1],keys[0][0])
print(encryptmessage)
decryptmessage=fastpower.fast_power(encryptmessage,keys[1][1],keys[1][0])
print(decryptmessage)