/首页
/开源
/关于
安全篇之永强接着教你加解密:非对称篇(四)
发表@2019-02-09 21:56:24
更新@2023-01-21 22:47:40
大家好,我是永强,虽然过年我没有收到压岁钱,但是我过年也没有收到任何打赏。 没关系,又不是不能过。 其实过年期间我就给上高中、初中的少年一代用加解密技术装了一波儿大逼,一点儿都不出乎预料:根本没人鸟我。让我感到惊讶的是,他们这些人一天天除了斗地主就是王者荣耀,一天天抱着个手机跟特么屎壳郎滚粪球子似的,我上去问个质数、合数竟然都特么忘记了,让我感到十分欣慰。 #### 没想到除了财富外,知识也会两极分化。 其实今天的话题和质数真的有关系,如果你要也不知道质数是什么了,趁着过年还在老家,赶紧去找你小学数学老师去问问,然后你就可以精通质数了。 非对称加解密的典型代表就是RSA,而且RSA用的最广泛最多,所以,实际上这篇就是来普及RSA的。我本来想起一个类似于《论RSA的音容笑貌和尺寸长短》这样的标题,不过老李不让,他说这样会破坏标题的队列感和仪式感,同时也会让本篇文章产生孤独感,破坏风水。。。 实际上RSA算法都是公开的,算式都是公开了,任何一个人都可以从互联网上查阅到这个公开算法过程是什么: - 所以首先,有人说ZF搞愚民政策:不存在的。任何人都可以通过互联网学到你想学的任何正宗的知识,包括社会主义学也包括资本主义学,包括唯心主义也包括唯物主义。ZF才没有心情愚你,愚你自己的就是你自己,以你的智商和水准,压根就不需要专门愚你,别一天天自作多情。 - 所以其次,加解密算法越是公开,就越是安全;越是窝着藏着不公开,就越是不安全。 记住下面两个公式: > 密文 = 明文^E mod N 明文 = 密文^D mod N 以上就是RSA加密和解密的过程,就是这么简单粗暴。只要上过学,就知道上面算式是什么意思。 在下面的课程开始前,请事先了解一下如下几个名词的含义: - 质数 - 最大公约数 - 最小公倍数 - mod,即余数 > 1、准备两个随机的质数p和q,其中p=13,q=17,然后令N=p\*q,即N=221 > 2、令L为p-1(12)和q-1(16)的最小公倍数,即L=48 > 3、有数字E,E需要满足如下条件: - 1 < E < L(L=48) - E和L最大公约数为1 所以,满足条件的E有很多,可以选择5 > 4、有数字D,D需要满足如下条件: - 1 < D < L - E * D mod L = 1 所以,这个很简单,可以求出D=29(怎么求的自己去算) > 5、所以N=221,L=48,E=5,D=29 所以,请记住: > {E,N}即{5,221}就是公钥,{D,N}即{29,221}就是私钥 那么,我们将这两个数字代入到公式中去尝试一把: > 假如明文是123,那么代入到加密公式中: 123^5 mod 221 = 106 所以106就是密文。将密文代入到解密公式中,如下: 106^29 mod 221 = 123 解出密文为123 #### 完美!完美!简直完美!比老王的meshbox还完美! > TIPS:如何计算106的29次方。由于结果太大,很多计算器一般都是直接GG。所以,可以化解一下106的29次方: 106^29 = 106^(6+6+6+6+5) = (106^6)\*(106^6)\*(106^6)\*(106^6)\*(106^5) 取余的时候: ( (106^6) mod 221 ) \* ( (106^6) mod 221 ) \* ( (106^6) mod 221 ) \* ( (106^6) mod 221 ) \* ( (106^5) mod 221 ) mod 221 以上就是RSA数学理论推演过程,那么,是时候落实到code上了! ```php