[CTF]-Crypto:RSA密码的基础应用

RSA密码的基本知识:

RSA密码常见的参数有:

        p、q、e(公钥部分)、d(私钥部分)、n(n=p*q)、m(明文)、c(密文)

基本运算公式:

明文加密:

        c=m^e(mod n)

密文解密:

        m=c^d(mod n)

求d公式:

       表现形式1:

        d=[k(p-1)*(q-1)+1]/e  其中k为任意整数

        表现形式2:

        d=[1(mod n)]/e

        表现形式3:

        e*d=1(mod n)

补充:这两个公式只是表现形式不一样,实质上是一样的。

公钥和密钥:

        公钥:(e,n)

        密钥:(d,n)

补充:部分题目可能会有dp、dq。其中dp=d%(p-1),dq=d%(q-1)

RSA密码在CTF的crypto题的基础exp应用(python):

       虽然我们知道RSA密码的参数该怎么计算,但是当所给参数过大的时候计算量会非常大,口算、手算肯定是不现实的,这时候就要用python编写exp来计算参数,而全使用基本python语法的exp效率过于低下,在此我总结一下exp里的关键操作。

求d:

       已知求d公式如上,比如e*d=1(mod n),我们可以利用python的gmpy2版块所拥有的invert函数来计算d,如下:

from gmpy2 import*

d=gmpy2.invert(e,(p-1)*(q-1))  #invert函数的作用是求出乘并取余(p-1)*(q-1)为1的某一整数

gmpy2的安装方法:

        输入以下命令(确保pip3已安装)

sudo pip3 install gmpy2

求明文m或求密文c:

        求明文m和求密文c可以用python的pow函数,如下:

c=pow(m,e,n)

m=pow(c,d,n)

#pow函数返回的是c的d次幂取余n的值

你可能感兴趣的:(安全,网络安全,密码学)