大家都知道,我前天公布了一个开源项目SOHA,一个Golang 模板引擎的增强函数库,详见这篇 https://www.flysnow.org/2019/12/02/golang-template-soha-library.html 文章。也就是这篇文章中,我我手一抖,误写了三个字,差点引发一场微信群大讨论的血案~

故事要从一个早上说起,这天深圳的天格外的冷,灰蒙蒙的,我在上班的路上,琢磨着把前天写的文章分享下,发到微信群里~

过了一段时间,等我去看的时候,发现有点炸锅的苗头了,原因就是一位群里的朋友,发现我文章里写的是base64加解密,所以就把这一问题抛了出来,并且指出,base64是编码,不是加密。

PS:因为隐私原因,这里没有群聊截图。

他说的完全正确,指出了我的笔误,因为我在提交SOHA项目文档的时候(2019-11-29)写了也是编码,详见:https://github.com/flysnow-org/soha/blob/master/README_zh.md#base64

那么为什么这次文章里会出现这样的问题呢?笔误?可读性?还是惯性?还没等我来得及思考,群里开始炸锅了。

大致氛围两种观点:

1.一种是严格意义上的,计算机术语上的加密和解密 2.一种是广泛意义上的,把明文转换为不可识别信息的加密

他们讨论已经不是base64了,而是什么是编码,什么是密码。

为了更好的区分这两种,在写这篇文章的时候,我特意查了维基百科。

https://zh.wikipedia.org/wiki/%E5%8A%A0%E5%AF%86

在密码学中,加密(英语:Encryption)是将明文信息改变为难以读取的密文内容,使之不可读的过程。只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。

在密码学中,加密是将明文信息隐匿起来,使之在缺少特殊信息时不可读。

https://zh.wikipedia.org/wiki/%E7%BC%96%E7%A0%81

编码是信息从一种形式或格式转换为另一种形式的过程;解码则是编码的逆过程。

扩展定义:对于特定的上下文,编码有一些更具体的意义。 加密(Encryption)是为了保密而对信息进行转换的过程。

以上来自于维基百科,从维基百科上看,其定义的加密字面意思更偏向于广义的加密,因为它认为只要把明文变成难以读取的密文内容,使之不可读取。

再来看编码:从一种形式转换为另一种形式,这不和加密说的差不多吗?所以我们再找,发现编码有个扩展的定义,其中加密也算一种编码

维基百科的种种解释,看来更偏向于第2种观点?那么第1种观点一定是对的吗?并不是!那么这是怎么回事,有的读者甚至可能已经被我绕晕了。

其实到了这里,我也终于把这个事情理清楚了,他们其实都没错。难道第2种观点的人,不知道base64是encode的?他们都是编程人员(或者曾经是),不知道敲了多少base64 encoding的代码,所以他们肯定是知道的。那么他们问什么还要说成是广义上的加密呢?

我来解释下这两种观点的出发点:

  1. 第1种观点的人,是从编程的角度,算法实现的角度来讲的,因为代码算法,以及方法的命名上的确做了区分,这是严谨的做法。
  2. 第2种观点的人,是从人的理解角度,让大家更容易理解的出发点来讲的,他们觉得这种大家更容易理解,尤其是非编程人员。

所以也可以理解维基百科给出的定义为什么更偏向于第2种观点的人了,因为它是面向所有人看的,所以解释的尽可能通俗易懂,如果搜索加密算法这类词,维基百科会更专业,解释也会更偏向于第1种观点的人,因为维基百科知道,搜索加密算法的这类人,都是专业的。

现实工作中,这些开发可能会和产品、设计、运营、推广等打交道,所以就养成了更多可以通俗易懂沟通的语言,把计算机编程上的属于转换为对方更容易理解的,这样沟通才会更方便,协作效率更高,这个是没错的,我也支持这种(带团队沟通更容易理解)

但是在IT编程行业中,我更倾向于严谨,这也是一个开发人员必备的素质。

如果一个开发人员能做到专业内严谨(第1种观点),沟通中灵活(第2种观点),就非常厉害了,具备带技术团队的潜质。

本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站asf https://www.flysnow.org/ ,第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。

扫码关注