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。
为了创建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。
相关文章推荐
- openssl rsa 加密,解密,签名,验签简单例子
- Thread学习(七) 用读写锁ReadWriteMethod实现个简单的例子,cache缓存的原理
- .Net Reactor 加密的简单例子
- Ice学习--简单的例子(服务端)
- RSA简单加密与解密
- hadoop学习笔记3.通过电话通信清单例子简单使用Reduce和打包JAR
- Mybatis 入门学习,简单例子
- Logstash学习1-logstash的简单例子
- JS学习笔记 - 一个简单例子
- 微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇
- Lane-学习OpenGL(3)-7个简单例子
- ASP.NET学习篇(3)—几个简单的ASP.ENT的例子
- 通过Redux源码学习基础概念一:简单例子入门
- RSA加密解密学习
- ios学习笔记block回调的应用(一个简单的例子)
- Qt学习 之 Socket通信(一个简单的例子)
- 菜鸟学习Hibernate——简单的一个例子
- python使用百度进行爬虫简单学习例子
- 转Javascript到PHP RSA加密通讯的简单实现
- 一种简单注册码加密的例子分析