大话RSA
我们接触过诸多的数学趣题,下面我们看以数学黑洞的例子
123
黑洞
(即
西西弗斯
串)
数学中的
123
就跟英语中的
ABC
一样平凡和简单。然而,按以下运算顺序,就可以观察到这个最简单的
黑洞值:
设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数,
例如:
1234567890
,
偶:数出该数数字中的偶数个数,在本例中为
2
,
4
,
6
,
8
,
0
,总共有
5
个。
奇:数出该数数字中的奇数个数,在本例中为
1
,
3
,
5
,
7
,
9
,总共有
5
个。
总:数出该数数字的总个数,本例中为
10
个。
新数:将答案按
“
偶
-
奇
-
总
”
的位序,排出得到新数为:
5510
。
重复:将新数
5510
按以上算法重复运算,可得到新数:
134
。
重复:将新数
134
按以上算法重复运算,可得到新数:
123
。
结论:对数
1234567890
,按上述算法,最后必得出
123
的结果,我们可以用计算机写出程序,测试出对任意一个数经有限次重复后都会是
123
。换言之,任何数的最终结果都无法逃逸
123
黑洞。
夫妻数
接下来我给各位两组“夫妻数”(此名由我随便命名的)
KU=(7,303839617),KR=(86801359,303839617)
KU和KR配合会产生神奇的效果:我们设任意正整数N它在KU和KR的作用下有如下效果:
(N^7)mod(303839617)=X
(X^86801359)mod(303839617)=N;
如果你不信可以找个正整数试试.
猜想公钥加密算法
我们做个大胆的猜想,我们用KU做加密密钥算法如上面,KR做解密密钥算法也如上是否可以实现我们上一节说的公钥加密的算法,可以但是有个问题我们如果只找到了这么一组数那是没有加密意义的,如果我们可以找到有限对这样的数也是没有安全可言的,但是这个发现时可喜的,至少我们找到了一种加密密钥和解密密钥不同的算法。我们的问题就不在是这种设想是否正确而是,我们想办法解决如何产生“夫妻数”,如果我们找到了产生无限个“夫妻数”的算法,那么问题就解决了,公钥加密算法产生了,至少产生了一种公钥加密算法。
RSA
算法
很幸运,有人真的发现了这种算法(不是发明,我们要承认,数学的先天存在性),对于做工程而言我们只要套套公式就可以了,下面我们记忆这种公式(要说学习也可以)。
1,密钥的产生
选择大素数:p,q
p和q互异
计
算 :n=p*q
计
算 :φ(n)=(p-1)*(q-1)
选择整数 :e, gcd(φ(n),e)=1;1<e<φ(n)
计
算 :d, d=e^(-1)modφ(n);
公
钥 :KU = {e,,n}
私
钥 :KR = {d,n}
2,加
密
明
文 :0≤M<n
密
文 :C=M^e(mod n)
3,脱
密
密
文 :0≤C<n
明
文 :M=C^d(mod n)
|
条理很清晰了,由于是算法我们如果大话将误人子弟。
看到这里各位是否有如下疑问(为了方便各位,我以问答的方式给出):
第一:RSA加密和解密都针对数字的运算如何用于非数字的加密?
答:如果你看过《大话计算机加密技术》你就应该知道,在计算机内部都属对数字的操作,那么第二个问题就来了。
第二:如何把非自然数的信息变化为自然数?
答:编码方式,如果以ASCII编码方式读入数据那么就可以将其化为对应的整数值,解密输出的时候再以ASCII编码输出。下面举例加密“I LOVE YOU”信息以ASCII读入
字符
|
ASCII值
|
I
|
73
|
空格
|
32
|
L
|
76
|
O
|
79
|
V
|
86
|
E
|
69
|
空格
|
32
|
Y
|
89
|
O
|
79
|
U
|
85
|
我们利用其对应值逐个加密。还有个问题一般的n值都非常大,就是说我们逐个加密太浪费时间了,我们可以将几个合并起来加密使它更接近n值,这样就减少了加密的算法的执行次数。接着的问题“如何合并”,比如要合并”I”和“空格”。你有多少种合并的方法,可行的有几种,试试吧,想知道答案和评测你的方法联系hdusec@126.com.用中国的阴阳对立学说可以推出另一个问题:如果合并的结果或者转化的结果不满足“0≤M<n”,请看下面问题。
第三:“0≤M<n”这样的限制如何处理?
答:分块加密。如果加密信息化为自然数时不满足要求,就要分块加密。问题是多多的,自己想想如何分块。有问题还是那个邮箱。
如果你是个爱刨根问底的人,你最大的疑惑就是RSA算法的道理何在。这是一个相对专业的问题,专业在数学上,如果学过数论也不是太大的问题,我三言两语也说不明白,你还是自己到http://en.wikipedia.org/wiki/RSA看看.
夫妻数
接下来我给各位两组“夫妻数”(此名由我随便命名的)
KU=(7,303839617),KR=(86801359,303839617)
KU和KR配合会产生神奇的效果:我们设任意正整数N它在KU和KR的作用下有如下效果:
(N^7)mod(303839617)=X
(X^86801359)mod(303839617)=N;
如果你不信可以找个正整数试试.
猜想公钥加密算法
我们做个大胆的猜想,我们用KU做加密密钥算法如上面,KR做解密密钥算法也如上是否可以实现我们上一节说的公钥加密的算法,可以但是有个问题我们如果只找到了这么一组数那是没有加密意义的,如果我们可以找到有限对这样的数也是没有安全可言的,但是这个发现时可喜的,至少我们找到了一种加密密钥和解密密钥不同的算法。我们的问题就不在是这种设想是否正确而是,我们想办法解决如何产生“夫妻数”,如果我们找到了产生无限个“夫妻数”的算法,那么问题就解决了,公钥加密算法产生了,至少产生了一种公钥加密算法。
RSA
算法
很幸运,有人真的发现了这种算法(不是发明,我们要承认,数学的先天存在性),对于做工程而言我们只要套套公式就可以了,下面我们记忆这种公式(要说学习也可以)。
1,密钥的产生
选择大素数:p,q
p和q互异
计
算 :n=p*q
计
算 :φ(n)=(p-1)*(q-1)
选择整数 :e, gcd(φ(n),e)=1;1<e<φ(n)
计
算 :d, d=e^(-1)modφ(n);
公
钥 :KU = {e,,n}
私
钥 :KR = {d,n}
2,加
密
明
文 :0≤M<n
密
文 :C=M^e(mod n)
3,脱
密
密
文 :0≤C<n
明
文 :M=C^d(mod n)
|
条理很清晰了,由于是算法我们如果大话将误人子弟。
看到这里各位是否有如下疑问(为了方便各位,我以问答的方式给出):
第一:RSA加密和解密都针对数字的运算如何用于非数字的加密?
答:如果你看过《大话计算机加密技术》你就应该知道,在计算机内部都属对数字的操作,那么第二个问题就来了。
第二:如何把非自然数的信息变化为自然数?
答:编码方式,如果以ASCII编码方式读入数据那么就可以将其化为对应的整数值,解密输出的时候再以ASCII编码输出。下面举例加密“I LOVE YOU”信息以ASCII读入
字符 |
ASCII值
|
I
|
73
|
空格
|
32
|
L
|
76
|
O
|
79
|
V
|
86
|
E
|
69
|
空格
|
32
|
Y
|
89
|
O
|
79
|
U
|
85
|
我们利用其对应值逐个加密。还有个问题一般的n值都非常大,就是说我们逐个加密太浪费时间了,我们可以将几个合并起来加密使它更接近n值,这样就减少了加密的算法的执行次数。接着的问题“如何合并”,比如要合并”I”和“空格”。你有多少种合并的方法,可行的有几种,试试吧,想知道答案和评测你的方法联系hdusec@126.com.用中国的阴阳对立学说可以推出另一个问题:如果合并的结果或者转化的结果不满足“0≤M<n”,请看下面问题。
第三:“0≤M<n”这样的限制如何处理?
答:分块加密。如果加密信息化为自然数时不满足要求,就要分块加密。问题是多多的,自己想想如何分块。有问题还是那个邮箱。
如果你是个爱刨根问底的人,你最大的疑惑就是RSA算法的道理何在。这是一个相对专业的问题,专业在数学上,如果学过数论也不是太大的问题,我三言两语也说不明白,你还是自己到http://en.wikipedia.org/wiki/RSA看看.