对称加密与非对称加密(RSA)

对称加密与非对称加密

前言

这是我学习https遇到的问题。我刷面经的时候在好多地方都看到了面试官问一些https的知识,搞得我很难受,根本就不懂啥是https,只知道它比http安全,但究竟是怎么个安全法,不晓得啊。网上说它用了加密算法,那咱们就一起了解一下,加密算法里都有哪些东西。

对称加密

啥叫对称加密呢?
其实很好理解。这是最开始被使用的一种加密算法。假设A和B要一起传递一些消息。但是总有一些人会偷偷监听他俩的消息,比如A对B说:我的银行卡号是xxxxxxxx,密码是xxxx。于是B笑嘻嘻的准备去银行取钱。可万万没想到啊,这条信息被黑客H监听到了,于是黑客直接跑到银行,先一步取出了钱。
那怎么解决这样的问题呢?
非常简单,A和B两人事先约定,收到数字0的时候,将其当成2来翻译,收到数字1的时候,将其当成数字0来翻译…这样一来,只有A和B俩人知道咋翻译传输的数据。黑客就算是再牛逼,也没辙了。钱就这么被B给取出来了。

但是先别高兴的太早,A要怎么和B进行这样的约定呢?他俩线下碰个头然后一起拿着小本子一起商量?这肯定是很扯淡的对吧。那要不就线上传输?卧槽?这tm不就陷入了一个死循环了么?
我想实现加密传输,就得先传输这些明文秘钥;
可是为了能安全的传输明文秘钥,我必须得先实现加密传输。
(一种植物)
哦忘记说了,对称加密就是加密和解密使用的是一套秘钥(我叫明文)

非对称加密

啥是非对称呢?就是说,A有自己的一套加密算法,B也有自己的一套加密算法。B如果想给A发消息,就必须得先按照A的规则加密再说。同样的,A如果想给B发消息,就必须得先按照B的规则加密再说。A和B各自加密的解密方法,就只有他们各自自己知道,互相只知道对方的加密方法(加密不等于解密哦!是不是非常惊讶!我知道了它的加密方法,但是我居然不能解密出来!)这样一来,中间的黑客就像个小傻子一样,随手一抓,卧槽,看不懂,又随手一抓,卧槽,还是看不懂(黑客只能知道,如果给他俩发报文,该怎么加密,可是他不知道,他俩是如何解密的)
一个大概的流程如下:
A对B说:这是我的公钥,你们给我·发消息的时候记得用公钥先加个密哦
B收到后,就用了A的公钥进行了加密,然后给A回:好的,这也是我的公钥,下次你给我发消息的时候也用我的公钥先加密一下。
后面他俩就都开始用对方的公钥进行加密然后通信。

神奇的问题

现在咱们来看看非对称加密的神奇问题。卧槽居然有一个公钥和一个私钥,而且用公钥加密后居然能用私钥解密,关键我知道了公钥后居然还算不出私钥!!!
咱们来看看这个生成秘钥对的流程。
1.首先A要找两个非常大的质数P and Q
2.计算他俩的乘积n = PQ
3.将n写成二进制的形式
4.[重点来了兄弟们]计算n的欧拉函数!!!
卧槽,啥是欧拉函数?很简单,就是f(n)表示n的欧拉函数,指的是数值比n小的数,且与n互质,这样的数有多少个。卧槽这咋算啊???你这个n很有可能上千万亿,卧槽这叫我咋算啊?有的小朋友就说,这个他会!不就是O(n)的复杂度然后辗转相除么?(抱歉我这个复杂度说的不对,肯定比它还得大)
难道就没有什么快速的计算方法么?当然有。f(n) = (P-1)(Q-1),您也别问我这个公式是咋来的,反正这就是数论里的一个公式,肯定没问题。
5.咱们呐,再在这个1~f(n)-1这些整数里,选择一个数e,这个e和f(n)互质。
6.咱们继续找一个整数d,使得e
d%f(n) = 1,肯定很好找呀,您想想,当时咱们聊hash的时候就提了一句,为啥哈希的bucket个数最好是质数,就是因为在解决哈希冲突的时候能遍历每个bucket。
7.到此,公钥和私钥就产生了,公钥是(n, e),私钥是(n, d)。来,朋友,不相信的话咱们检验一下,看看能不能通过公钥,算出来私钥(反正这个加密算法是公开的)。
肯定不好算啊,妈耶光是f(n)就够你喝一壶了,穷举的话估计搞不定。
8.那么有的朋友就问,您给我公钥,我该咋用起来呢?很简单,把您要加密的明文进行如下加密计算:
pow(输入数字,e) % n = 加密后的密文。
是不是很简单。那有的朋友又想问了,我都知道你的加密方式和参数了,那我虽然不知道你的秘钥咋算出来,也不晓得你的秘钥是干啥用的,但是我都知道这个加密的计算过程了,卧槽我反过来操作一下不就成了么?
别做梦了,您这想的美,您知道n是个非常非常大的数么?您知道取余这个操作的逆操作是啥么?您知道光这一步,您就得枚举多少次么?
洗洗睡吧。
9.行,加密过程无法直接解密,黑客它认了。可是您A收到加密后的内容,如何解密呢?这就得私钥上场了。解密过程异常简单,就像加密一样简单。
pow(加密后的密文, d) % n = 解密后的密文。
这个里面的数学原理是啥?您别问我了,我是真没仔细研究过,反正对就完事儿了。(听说是和费马小定理有关系,高中的时候接触过那么几次)
目前被破解的最长RSA密钥就是768位。实际应用中 RSA 的密钥长度为 1024 位,重要场合 2048 位,未来半个世纪不可能破解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值