RSA加密学习的简单例子

在RSA中,最大值(称为max)由随机挑选的两个素数相乘而得。公钥和密钥在0和最大值之间挑选(称为pub和priv)。为了加密一个数字,让这个数字自己乘自己pub次,并确保当乘积大于最大值时能够回折(像时钟一样)。解密时,再用这个加密得到的结果自己乘自己priv次,便能退回到原始的数字。这是一件很神奇的事情!但是它确实被实现了。

为了创建RSA密钥对,首先得随机的挑选两个素数来计算出max。然后从0到max中再挑选出公钥pub,只要知道两个素数,那么就能够从pub中算出私钥。这就是为什么因式分解与破解RSA有关—对max的因式分解,可以得到两个素数,这样你便能够通过pub计算出某人的私钥,从而来解密消息。

让我们举一个更加具体的例子吧。挑选素数13和7。他们积为91,也就是max。从0到91中挑选5作为pub来加密。利用算法Extended Euclidean,输入参数:7,13,5,得到私钥是29。

三个参数(max:91,pub:5,priv:29)定义了RSA系统。这时,可以取一个数字,通过乘自己5次来加密自己,然后取这个结果乘自己29次来回到原来的数字。

让我们来加密“CLOUD”。为了能够用数学来表示一个消息,我们必须将字母转变为数字。一个常用的转换方法是UTF-8。每个字母对应一个数字,如下图:


经过编码后的“CLOUD”是67,76,79,85,68。每个数字都小于最大值91,所以我们能够各自对他们进行加密,为了简便,我们以第一个字母为例:

我们让67乘5次来加密自己:
67x67=4489=30(回折)

(回折:因为4489大于最大值max,所以我们必须回折它。我们将它除以91然后取余数,

4489=91x49+30)

30x67=2010=8

8x67=536=81

81x67=5427=58

这个结果说明67加密后为58。

为每个字母重复这个过程,我们可以加密CLOUD。

为了解密,我们需要让58乘自己29次。

58x58=3364=88

88x58=5104=8

9x58=522=67

神奇的事情发生了!我们变回了67。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值