/首页
/开源
/关于
安全篇之永强手把手教你加解密:对称篇(一)
发表@2019-02-01 19:49:37
更新@2023-01-21 22:47:40
大家好,我是永强,就是老李之前经常给你们说的区块链大神、高中未毕业依然大公司iOS主程一波儿流、只生活在老李口中尚未真实露面的骗钱高手、老王的左膀右臂 ------ 永强。 之前老李企图让我发表一些关于如何进行高端骗工资骗钱的教程,被我义正言辞地拒绝了,因为:毕竟是毕生绝学,不能就这么轻而易举地教给你们。不过后面有时间我可以给大家出一些关于“如何在公司混日子还能升职加薪”的入门级教程,传男不传女,独家绝技!敬请期待! ![](https://ti-node.com/static/upload/6497035977700147201) 言归正传,那个一直以来我对加解密技术都是耿耿于怀的,因为很多年前有一次面试中被这东西给坑掉了,虽然我后来就自己对加解密中一些自己不懂的地方请教了对方而且他也没有给我讲清楚... 事情都过去好几年了,本人自我感觉已经一定程度掌握了一些关于加密的高端技术,因为决定出来装一波儿逼,时间比较紧张,我打算赶在2019年农历新年之前把逼装完,你们要注意配合。 我知道老李之前在社区发表了一些关于加密啊、解密啊之类的东西,甚至还扯上了ECDH,不过这并不与本系列产生冲突,这并不重要,不要在意这些细节,他那个too young too simple,sometimes naive... 这将是一个大概由四篇左右的文章组成的系列文章,所以在正式开始之前,我不得不强调一点 ------ 如下这几门学科的基础理论知识: - 《离散数学》 - 《微分与积分》 - 《空间几何》 - 《概率论》 你并不需要具备。。。 不过你总得知道除了html和css之外的任意一门编程语言。尽管本人精通上到CLanguage下到Perl之类的各种语言,但是本文将采用世界上最好的语言进行一些程序演示,后面老李可能会使用CLanguage和Golang进行其他语言的演示补充。 简单说来呢,加解密技术就是分为两大类: - 对称加解密 - 非对称加解密 其中,常见的对称加解密算法有DES、3DES、AES;而非对称加解密技术比较典型的则是RSA,就是什么公钥私钥证书什么乱七八糟的。 我们先从对称加解密开始,粗暴地说呢,对称加解密就是“加密和解密的时候用同一个密码”,听起来就非常对称,有没有? 用图表达一下就是: ![](https://ti-node.com/static/upload/6497038508832587776) 最一开始的时候,我朝人民一般都是倾向于使用“天王盖地虎”,“宝塔镇河妖”这种加解密技术;然而,美帝用了一种叫做DES的技术进行对称加解密,这玩意一度成为业界通用的对称加解密技术,银行、五角大楼都爱用这玩意,可惜好景不长、世风日下、世态炎凉,这玩意的破解成本越来越低越来越低~~ 于是,为了续命,就又有一些白胡子老头给DES打补丁,缝缝补补搞出来一个玩意叫做3DES,继续用,又不是不能用...这个顾名思义就行了,别打我,真的:3DES就是用DES处理(注意是处理,我没说是加密)了三次的意思。就目前看来,3DES实际上用的可能也并不是十分广泛了,所以如果大家在选择对称加解密技术的时候,尽量避开DES和3DES就可以了。 呵呵,喜新厌旧的沙雕人类...虽然DES已经没人用了,但毕竟也是辉煌过,我觉得还是得动手表演一波儿。我们知道,***在php7里,原来的mcrypt系列加解密已经被放弃掉了,官方建议我们使用openssl系列来进行加解密***,所以确保你的PHP环境里安装了openssl标准扩展。 ```php PHP Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in /home/ubuntu/lab/test.php on line 10 大概意思就是:用了一个并不推荐而且不安全的空iv在test.php的第十行。我正在翻译的这句的时候,已经精通英语的老李在旁边跟我说“你这翻译也太硬了,要学会人性化,看好了,一看你这就是没上过全日制大学本科的恶果”: > PHP警告:openssl_encrypt():iv向量最好别是空的,不推荐这么用,而且这样并不安全~ 什么是iv向量?先抛开这个问题,我先写一段代码,让他能跑起来: ```php