
RAS的加密原理大概是这样的。先选择两个大的质数p和q,然后自然的有n=p*q,有了这个前提之后我们开始生成公钥和秘钥。
1、公钥的选取方式是这样的:
a.首先计算 (这个东西是欧拉函数,大概的意思就是说比n小的正整数里面和n互质的数有多少个)。根据欧拉函数的性质有 :
上述公示成立的前提呢就是p和q都是质数。
b.选取一个数e, 而且要满足 ,说人话呢就是e和 的最大公约数要为1,也就是要互质
通过上述a、b步骤我们就得到了公钥。
2、私钥的选取方式是这样的:
设私钥为d,d需要满足 ,说人话就是私钥d和公钥e的乘积和 的模要为1。知道了e和 可以通过计算得到d,计算方法为:
其中k为整数
3、加密方式是这样的:
设明文为m,秘文为c的话,
这是加密步骤,通过e和n可以完成加密
这是解密步骤,通过d和n可以完成解密
通过上述描述不难看出公钥为e和n,秘钥为d和n。如果我们想通过公钥推算出秘钥的话,由于根据上文 ,那我们就需要知道 。根据欧拉公式的通式:
(其中p1, p2……pi为n的所有质因数,k是不为0的整数)
这就需要将n这个大数进行质因数分解,得到n的所有质因数进而计算出 ,最终得到秘钥d。当然也可以手动计算比n小的正整数里面有多少个数和n互质也可以得到 的值
-----------------------------------------------分割线----------------------------------------------
评论区有同学想搞清楚到底怎么加密的,比如”我爱你“这个字符串的加密,步骤如下:
1、选取两个质数比如:p=37,q=41(质数可以查看质数表去获取)
2、确定你的公钥和私钥,先列出来必要的一些值:
1)
2)
3) e取1~1440之间和1440互质的一个数
4) k取大于等于1的一个数
5)
这样我们得到了公钥为(73,1517),私钥为(217,1517),下面进行加密和解密:
"我爱你" 转unicode "\u6211\u7231\u4f60",分为三个部分:
\u6211=>我
\u7231=>爱
\u4f60 =>你
对每一个部分做加密,我们取第一个6211为例吧。
再对密文做解密
这里面要注意的是:
1、私钥 ,d不能为小数
2、要加密的数字不能大于N
还有对于字符串的加密,都需要把字符串转成数字才能进行上述工作,加密本质是一种数学运算而已,英文转ASCII码,汉字转unicode等等。
