c++用rsa加密一段文字_《真名实姓》译后扯犊子,关于加密术、RSA算法blabla……...

女士们,先生们,老少爷们儿们!在下张大少!

先纪念一下N年前《科幻世界》上的《真名实姓》连载,年少时的科幻启蒙读物。

e20ac2ad92e9dd7d2a7bb847ef5ee35f.png

关于弗诺·文奇的小说诸位读者心中自有明断,自然无需在下多言。在下在此胡扯些关于加密术的知识。

书中《密码学与真名实姓的政治学》一节介绍了密码学的基本原理,对于大多数门外汉而言阅读起来或许并不轻松。在下把当初译书时的学习笔记分享在此,希望能给读者些许帮助。

当然,对此无感的读者略过即可,并不影响对于小说的欣赏。再说,以小说中大巫们的法力,破个RSA加密还不是小儿科?

一 对称加密——古老的方法

爱丽丝(A)想传一句话"run"给鲍伯(B),她不能直接把"run"讲给鲍伯,因为有人窃听。咋办?她设计了一种加密算法——每个字母加1。那么,"r"加1即"s","u"加1即"v","n"加1即"o",所以就变成了"svo",这样别人就都看不懂了,可以公开告诉鲍伯了,对不?鲍伯虽然看不懂"svo"是个啥意思,但他知道二人之间的约定是把每个字母加1,想还原就把每个字母减1即可,"svo"减1即"run",大功告成!

此处,"run"是希望传送的东西,即明文;而"svo"是实际传送的东西,即密文,这个密文是公开的,谁都随便看,因为反正也看不懂。真正秘密的地方在于"字母加1"这个规则,这个规则即密钥。

在传统的密码学中,秘钥的选择至关重要,人们会把它设计的尽可能复杂(不一定非得是"字母加1",加减乘除、乘方等运算皆可),以防被破解。但从理论上说,如果坚持不懈地尝试,秘钥是有可能被破解的。因为从字母的出现频率、排列组合模式等特征中有可能找到线索。

4cf7f011124bb1d1bdbe07bc0276f69c.png

二 非对称加密——当下流行的方法

为了解决对称加密有可能被破解的缺陷,当下普遍使用的是非对称加密。

还是一样的情形,爱丽丝(A)想传一句话m给鲍伯(B)。不同的是,这次鲍伯首先要生成两个有相关性的数字e、d,e即公钥,d即私钥。鲍伯先把公钥e传给爱丽丝,公钥公开传递,不怕窃听。爱丽丝通过公钥e得到密文c,然后公开发给鲍伯。这次,还原明文不是减去e,而是减去d,所谓不对称便在于此。减去d之后,即可得到明文m。这个私钥d只有鲍伯自己知道,破解者只能根据e、c来推理d,所以保密性更好。

非对称加密有很多种方法,"RSA加密算法"便是最流行的一种。

bc9ad190bc7e52c9ca2dd9b7072343a7.png

三 RSA加密算法——一种典型的非对称加密

所谓"RSA"是发明这种算法的三位教授的名字的首字母。

算法的步骤如下:

1 鲍伯先找出两个质数p、q。

2 两个质数做乘法,令n=p*q。

3 取函数φ(n)=(p-1)*(q-1),此函数成为欧拉函数,虽然我也不知道这跟欧拉有什么关系。

4 找出公钥e和私钥d之间的关系。

指定e是1和φ(n)之间的一个整数,且e和φ(n)要互质。

d的取法比较麻烦,e*d/φ(n)的余数必须是1。

举个例子,取p=3,q=11,则φ(n)=2*10=20,e取3,那么d则取7即可。

5 爱丽丝要发送m,此时她的加密方法是:算出m^e/n的余数。这个余数即密文c。

6 鲍伯收到密文c之后,此时他的解密方法是:算出c^d/n的余数。经过数学证明可知,这个余数即明文m。(然而在下并不会证明,不过试了几个数字发现屡试不爽。)

大功告成!

这种方法的安全性在于,破解者若想破解,必须由e、φ(n)、c推算出d。而n是两个质数p、q的乘积,在实践中想从n反推出p、q并不是33=3*11那么简单,因为RSA算法中规定n是个1024位的数字。如此大数的质因数分解对于目前的人类而言难如登天。如果靠普通计算机,没10年功夫怕是搞不定。何况银行的保密系统还每隔一段时间更新一次。

但量子计算机问世后,超强的计算力或许能攻克大数的质因数分解。那时的加密术会如何发展,我们拭目以待!

青山不改,绿水长流,在下告退。

转发随意,转载请联系张大少本尊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值