Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一种计算大输入欧拉函数的有效方法_Python_Python 3.x_Cryptography - Fatal编程技术网

Python 一种计算大输入欧拉函数的有效方法

Python 一种计算大输入欧拉函数的有效方法,python,python-3.x,cryptography,Python,Python 3.x,Cryptography,根据维基百科关于的描述,我编写了以下代码: from math import gcd def phi(n): amount = 0 for k in range(1, n + 1): if gcd(n, k) == 1: amount += 1 return amount 它适用于小数字,但我想计算一些数字的toticent函数,例如 n=5692297035794675412610596123456169 有没有更好的方法来计

根据维基百科关于的描述,我编写了以下代码:

from math import gcd

def phi(n):
    amount = 0
    for k in range(1, n + 1):
        if gcd(n, k) == 1:
            amount += 1
    return amount
它适用于小数字,但我想计算一些数字的toticent函数,例如 n=5692297035794675412610596123456169


有没有更好的方法来计算诸如大输入之类的Totoent函数?

由于这也是标记加密,这将进一步提高可能算法的有效性

如果知道
n
的素因子,有一种方法可以非常快速地计算Euler toticentφ。设pi为独立的
k
素数
n
的因子,然后

φ(n)=(p1-1)*(p2-1)*……*(pk-1)

对于素数幂也有一个公式。这在这里是不必要的,因为RSA加密/签名或Paillier加密或Rabin签名使用两个不同的素数
p
q

如我们所见,有效地找到φ(n)需要因子分解的知识。证明了对于RSA,φ(n)的知识等于
n
的因式分解。很快在这里看到

或参阅原始RSA文件

如果我们转向factoring(RSA),目前的记录是在2020年实现的,它拥有“大约2700个核心年,使用Intel Xeon Gold 6130 CPU作为参考(2.1GHz)”

但是,如果需要使用RSA,则应使用大小至少为2048位的模数,请参见中的。至少在一段合理的时间内,从经典因子分解和Shor的量子因子分解算法中,这是安全的


因此,如果您不知道因式分解,对于大的
n
来说,没有有效的算法来寻找欧拉常数。

您需要使用一些数学知识。暴力是不够的。如果这是RSA,你的大数是N=p*q,其中p和q是素数,那么有一个非常简单的方法来计算totitent(N)。一点研究会对你有帮助的。大吗?多大<代码>因子(5692297035794675412610596123456169)和
φ=(47-1)*(2819-1)*(65713-1)*(891551-1)*(57247819-1)*(12809677289-1)
这是否回答了你的问题?