您的位置:首页 > 其它

RSA加密学习的简单例子

2017-08-01 14:38 369 查看
在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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: