/首页
/开源
/关于
我赵永强又回来了:单散、认证与数签(五上)
发表@2019-11-03 16:14:44
更新@2023-04-27 23:14:13
各位好,我是永强,首先请你们按捺一下激动心情,然后我要开始了。 作为一个后知后觉的人,我也是昨天看到有人在光天化日之下公开批判我【尥蹶子】【不写公众号】,你们先感受下: ![](https://ti-node.com/static/upload/PNP/a/img_129.png#width-full) 看完这段话后我陷入了深深地思考,在思考了几秒钟后,作为一个浑身上下闪耀着人性光辉的人,我决定对上图中倒数第二句话进行一番友好的回应以及错误纠正: - 首先,我一点儿都不忙,我就是懒而已 - 其次是那玩意不叫工业机器人,确切说是工业视觉寻径AI机器人 同时,我也决定对上图中的正数第二句话进行简单的评述:懒就是懒,何必甩锅给忙,欺负"忙"不会说话? 我觉得我有必要给新来的朋友先自我介绍一下,首先我的存在确实是为了当老李没空整公众号时候来顶数的,在此之前,我写过的文章在这里,质量真的非常好但是阅读量都贼低,也算是我的一大特色,你们感受下: - 永强教你加解密:对称篇(一) - 永强持续教你加解密:对称篇(二) - 安全篇之永强继续教你加解密:对称篇(三) - 永强接着教你加解密:非对称篇(四) 在更新完第四篇后,由于我工作繁忙所以一直好长时间没有接着写,所以今天我就打算牺牲一下自己宝贵的周末时间来补充一下今天的内容:单散是单向散列的简称,认证则是消息认证码的简称,数签则是数字签名的简称。这三项内容本身与加密解密可能看起来没有太大关联,而且相对来说也比加解密【xue微】简单不烧脑一些。好了,我要开始了。 ### 单向散列 (后文中将一直使用单散来称呼单向散列)一直以来各路腿子们对单散有着强大且难以更正的误解,那就是一直拿加密来称呼单散,比如在公司干活的时候大佬会经常告诉你【前端把密码传过来,你加个盐用md5加密一下存到数据库里】,是吧... ...不过我也可以理解为习惯性口误,就是实际上人家知道单散并不是加密,但是为了适应大家所以才这么表达。 实际上我们最常见的单散就是md系或sha系,不过,还有其他并不常用的系列,在世界上最好的语言里,我们可以用这么个函数可以一次性列出一大坨单散函数,你们琢磨下: ```php md2 [1] => md4 [2] => md5 [3] => sha1 [4] => sha224 [5] => sha256 [6] => sha384 [7] => sha512 [8] => ripemd128 [9] => ripemd160 [10] => ripemd256 [11] => ripemd320 [12] => whirlpool [13] => tiger128,3 [14] => tiger160,3 [15] => tiger192,3 [16] => tiger128,4 [17] => tiger160,4 [18] => tiger192,4 [19] => snefru [20] => snefru256 [21] => gost [22] => gost-crypto [23] => adler32 [24] => crc32 [25] => crc32b [26] => fnv132 [27] => fnv1a32 [28] => fnv164 [29] => fnv1a64 [30] => joaat [31] => haval128,3 [32] => haval160,3 [33] => haval192,3 [34] => haval224,3 [35] => haval256,3 [36] => haval128,4 [37] => haval160,4 [38] => haval192,4 [39] => haval224,4 [40] => haval256,4 [41] => haval128,5 [42] => haval160,5 [43] => haval192,5 [44] => haval224,5 [45] => haval256,5 ) */ ``` 前几个还算能看,后面那些纯属只认识字母,假设要用的话应该咋用? ```php =7.2 $a_hmac_method = hash_hmac_algos(); // 既然是利用单散实现的mac算法,那么先看看支持的单散有哪些... print_r( $a_hmac_method ); $s_raw_content = "lalalaxiaodushe"; $s_password = "123456"; $s_hmac = hash_hmac( 'md5', $s_raw_content, $s_password ); echo $s_hmac.PHP_EOL; ``` 上述这坨PHP代码的意思就是,利用md5单散算法结合上密钥123456对内容lalalaxiaodushe进行MAC值计算,当然了计算结果是这样shai儿的: ![](https://ti-node.com/static/upload/PNP/a/img_127.png#width-full) 但是,你结合上述应用常见:客户端和API飞数据,一般都是跨语言的,少年~~~所以,在跨语言以及相同数据条件情况下,计算出来的MAC值应该是一样的。哥们儿活儿全,nodejs演示一把: ```php const crypto = require('crypto'); // 创建一个hmac对象 const hmac = crypto.createHmac('md5', '123456'); // 往hmac对象中添加摘要内容 const up = hmac.update('lalalaxiaodushe'); // 使用 digest 方法输出摘要内容 const result = up.digest('hex'); console.log(result); ``` 运行结果如下,你们琢磨下: ![](https://ti-node.com/static/upload/PNP/a/img_128.png#width-full) 完美~~~(未完待续) 最后我发个投票,大家对工业机器人有兴趣么,有的话我考虑写一些相关文章...