资讯专栏INFORMATION COLUMN

关于PHP加解密的懒汉入门篇(API安全加强篇一)

waterc / 3441人阅读

摘要:由于密钥被暴露了,所以必须换新的密钥,元首这会儿只能走途径告诉古德里安新的密钥,这会儿逗逼的事情来了,如何对密钥进行加密。但是,有一点是值得说明,那就是无论是对称加密还是非对称加密,都顶不住用机器是强行暴力猜解私钥。

懒汉

入门

这两点就足以说明这篇文章不想要着有什么高端大气的技术内容,我跟你讲,全是水。不可能有什么质数素数、椭圆曲线加密、迪菲-赫尔曼什么的,不可能有的。

首先我不懂,其次,反正你们也不懂。

不过这里还是要先说一点儿,就是很多泥腿子一直拿md5当加密算法来看待,但实际上md5是一种信息摘要算法(其实就是哈希),不是加密算法,因为md5不可逆,但是加解密是一个可逆的过程,所以以后这种低级错误还是不要犯的为好。

加密技术一直是技术圈中的一个独特领域和分支,其一些原理并不是随随便便就可以理解的来的。如果没有良好的数学底子,怕是很难研究下去。但是,作为一篇水文,不研究原理,仅仅来用一用来实践一把,还是没什么大问题的。

加密分为两大类:

对称加密,常见算法有DES、3DES、AES等等,据说AES是比较屌的最新最常用的算法

非对称加密,RSA、DSA、ECDH等等

对称加密用粗话说就是用同一个密钥对信息加解密。比如元首要操作东线战场了,给古德里安发了一段电报,大概意思就是“你给我闪开,让我操作!立马南下打基辅!”,但是元首又怕朱可夫给看到这段消息,于是元首就用了一个强壮的密钥123456来加密这段话,然后这段话就变成akjdslfjalwjglajwg了。古德里安收到这坨乱七八糟的玩意后,用123456来解密一下,得到明文“你给我闪开,让我操作!立马南下打基辅!”,然而朱可夫由于抓破脑壳也想不到这个超级密钥123456,所以朱可夫注定一脸懵逼,最终导致基辅60万苏军被奸!但是这里面有一个问题就是元首是如何告诉古德里安私钥是123456的。

两个人提前就商量好了,1941年6月22日的前一天偷偷商量好了。。。

两个人不是提前商量好的,而是古德里安到东线后,元首通过打电话、发电报、QQ、微信。。。 。。。

对于朱可夫来说,如果对方采用了方案1,那么他也没啥好办法,只能等潜伏在古德里安身边的特工卧底返回123456。由于密钥被暴露了,所以必须换新的密钥,元首这会儿只能走途径2告诉古德里安新的密钥,这会儿逗逼的事情来了,如何对密钥进行加密。答案是不能,此时问题陷入到欲要加密,必先加密的矛盾中。所以,这个密钥是注定要通过明文传输了,只要是明文传输,朱可夫就一定有机会把密钥搞到手。

非对称加密就是解决这个难题而生。密钥换来换去还想不暴露,扯犊子。还是元首和古德里安,这会儿他俩分别生成一对自己的公钥和私钥。这里需要强调的是:

公钥和私钥是成双成对生成的,二者之间通过某种神秘的数学原理连接着,具体是啥,我也不知道

公钥加密的数据,只能通过相应的私钥解密;私钥加密的数据,只能通过对应的公钥解密

公钥可以颁发给任何人,然而私钥你自己偷偷摸摸藏到自己裤裆里,别弄丢了

这会儿就简单了,元首把自己公钥给古德里安,然后古德里安把自己公钥给元首,然后都偷偷摸摸保存好自己的私钥。有一天,元首告诉古德里安“你丫别干了,天天不听我操作!”,然后用古德里安颁发的公钥加密好了,然后让空军到东线直接仍传单,扔的满地都是,古德里安看到后从裤裆里拿出自己的私钥解密,然后就立马请假回家休息了,回去前用元首的公钥加密了如下消息“傻逼,老子还不伺候了!”,然后让空军回去撒了柏林一地,元首看到后从裤裆里拿出自己的私钥一解密:“卧槽。。。”。虽然这双方都是大大咧咧的发传单,但是朱可夫只能在旁边一脸懵逼、生无可恋。因为用于解密的私钥从来不会在外流通,所以,泄露的可能性是0。

但是,有一点是值得说明,那就是无论是对称加密还是非对称加密,都顶不住用机器是强行暴力猜解私钥。一年不行两年,两年不行二十年,二十年不行一百年,总是能猜出来的,这是没有办法的一件事情。大家可以搜一搜关于768bit RSA被KO的事件,是吧。

下面我们从gayhub上扒了一个对称加密的库下来,尝试一把aes对称加密算法,地址如下:

https://github.com/ivantcholakov/gibberish-aes-php

直接git clone到目录中,然后测试代码如下:


保存为test.php,运行一下结果如下:

然后我们将上面代码反复运行100,000次,看看耗费多长时间:

require "GibberishAES.php";
$pass   = "123456";
$string = "你好,古德里安,我是希特勒,你赶紧给我滚回来...";
GibberishAES::size(256);
$start_time = microtime( true );
for( $i = 1; $i <= 100000; $i++ ) {
  $encrypted_string = GibberishAES::enc( $string, $pass );
  $decrypted_string = GibberishAES::dec( $encrypted_string, $pass );
}
$end_time = microtime( true );
echo "一共耗时:".( $end_time -  $start_time ).PHP_EOL;

保存为test.php,运行一下结果如下:

然后,我们再去gayhub上扒一个非对称加密的library,比如这个:

https://github.com/vlucas/pik...

我们把代码扒下来,然后自己写个demo试一下,如下:

encrypt( $data );
$decrypted = $rsa->decrypt( $encrypted );
echo "加密过后的:".$encrypted.PHP_EOL;
echo "解密过后的:".$decrypted.PHP_EOL;

保存为test.php运行一下,如下图所示:

然后我们将上面代码反复运行100,000次,看看耗费多长时间,这里只贴关键部分代码:

encrypt( $data );
  $decrypted = $rsa->decrypt( $encrypted );
}
$end = microtime( true );
echo "一共耗时:".( $end - $start ).PHP_EOL;

然后,运行结果如下图所示(实际上由于等待时间太长了,我索性去刷牙洗脸了):

不用惊讶,钛合金狗眼是否已被亮瞎?瞎也没用,这是真的,代码也没有问题,就是要这么长时间,没有办法。

那么问题来了,挖掘机学... ...对称加密不安全,非对称加密要人命,有没有什么好的办法?

废话,当然有... ...

最近开了一个微信公众号,所有文章都先发这里

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31317.html

相关文章

  • 关于PHP解密青年抬高(API安全二)

    摘要:实际上这一篇和上一篇均可以看作是关于加解密的懒汉入门篇安全加强篇一的后续,只不过侧重点在于安全上。回到上篇结果提到的问题,就是对称加密的安全性要人命,非对称加密的性能非常要人命。元首作为高智商罪犯,这种低级错误是不可能犯的。 为什么标题总是要带上API安全关键字呢?因为我想我乐意。 实际上这一篇和上一篇均可以看作是《关于PHP加解密的懒汉入门篇(API安全加强篇一)》》)的后续,只不过...

    wujl596 评论0 收藏0
  • 关于PHP解密青年抬高(API安全二)

    摘要:实际上这一篇和上一篇均可以看作是关于加解密的懒汉入门篇安全加强篇一的后续,只不过侧重点在于安全上。回到上篇结果提到的问题,就是对称加密的安全性要人命,非对称加密的性能非常要人命。元首作为高智商罪犯,这种低级错误是不可能犯的。 为什么标题总是要带上API安全关键字呢?因为我想我乐意。 实际上这一篇和上一篇均可以看作是《关于PHP加解密的懒汉入门篇(API安全加强篇一)》》)的后续,只不过...

    付伦 评论0 收藏0
  • 关于PHP解密之终扯到ECDH了(API安全三)

    摘要:很明显,非对称加密的极大的消耗成了一种瓶颈。其中,利用非对称加密的方案大概就是我前面说的那样,伪代码已经展示过了。 其实,前面两篇翻来覆去只为叨逼叨叨逼叨两件事情: 对称加解密,典型算法有AES、DES、3DES等等 非对称加解密,典型的算法有RSA、DSA、ECDH等等 但是,我知道大家最讨厌在看这种文章的时候冒出来的一坨椭圆曲线、素数、质数等等这样的玩意,反正看也看不懂,理解也...

    lcodecorex 评论0 收藏0
  • 我发誓这真是最后一关于ECDH文儿!(API安全四)

    摘要:这种神奇的算法可以让你服务器和客户端在不传输该对称密钥的情况下就可以通过心有灵犀地方式各自计算出一个对称密钥,而且可以一样,避免了该密钥在网络上流通,而且你可以随意更换,过期时间定为分钟,可谓是狠毒至极我们引入就是为了解决上面的问题。 首先是前段时间我在公众号里被人批(dui)评(gang)了,大概意思就是:你别老整那ECDH又是椭圆又是素数啥的,你就说这玩意实际项目中怎么用就完了,我...

    IntMain 评论0 收藏0
  • 我发誓这真是最后一关于ECDH文儿!(API安全四)

    摘要:这种神奇的算法可以让你服务器和客户端在不传输该对称密钥的情况下就可以通过心有灵犀地方式各自计算出一个对称密钥,而且可以一样,避免了该密钥在网络上流通,而且你可以随意更换,过期时间定为分钟,可谓是狠毒至极我们引入就是为了解决上面的问题。 首先是前段时间我在公众号里被人批(dui)评(gang)了,大概意思就是:你别老整那ECDH又是椭圆又是素数啥的,你就说这玩意实际项目中怎么用就完了,我...

    Barrior 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<