分析该段代码from CryptoUtilnumber import import gmpy2import randomimport binasciifrom secret import flagp = getStrongPrime1024q = getStrongPrime1024N = p qg r1 r2 = getRandomRange1 N for _ in range3g1 = po
首先导入了一些库和flag。
然后定义了一些变量p,q,N,g,r1,r2,g1,g2。
接下来定义了一个名为encrypt的函数,函数接收一个参数m。在函数内部,定义了两个变量s1和s2,分别为1到N的随机整数。
然后计算了两个变量c1和c2,分别为(m * pow(g1, s1, N)) % N和(m * pow(g2, s2, N)) % N。
最后返回了(c1, c2)。
接下来调用了encrypt函数,并将其结果赋值给变量c。
然后打印了N和g1。
接下来定义了一个名为pad的函数,函数接收两个参数msg和length。函数内部,计算了变量l为msg的长度。然后返回了msg加上(length - l) * chr(length - l).encode('utf-8')。
接下来重新定义了p和q,并判断p不等于q。
然后计算了变量n为p * q。
然后定义了变量e为5。
然后计算了变量d为e关于(p - 1) * (q - 1)的乘法逆元。
然后判断了e * d % (p - 1) * (q - 1)是否成立。
然后对flag进行了一些处理,将flag[len(flag) // 2:]的结果赋值给flag,并将其padded为长度为48的字符串。
然后将flag分割成3段,每段16个字符,转换为16进制的整数,并存储在列表m中。
然后计算了变量S为m的和对n取模。
然后计算了变量cnt为m的长度。
然后定义了列表A,B,C,分别存储(i + 128) ** 2,(i + 1024)和(i + 512)的结果。
然后定义了列表Cs,存储了(A[i] * m[i] ** 2 + B[i] * m[i] + C[i])的e次方对n取模的结果。
最后打印了N,e和Cs
原文地址: http://www.cveoy.top/t/topic/ieEx 著作权归作者所有。请勿转载和采集!