大家都知道,我前天公布了一個開源項目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種觀點的人,是從程式設計的角度,算法實作的角度來講的,因為代碼算法,以及方法的命名上的确做了區分,這是嚴謹的做法。
- 第2種觀點的人,是從人的了解角度,讓大家更容易了解的出發點來講的,他們覺得這種大家更容易了解,尤其是非程式設計人員。
是以也可以了解維基百科給出的定義為什麼更偏向于第2種觀點的人了,因為它是面向所有人看的,是以解釋的盡可能通俗易懂,如果搜尋
加密算法
這類詞,維基百科會更專業,解釋也會更偏向于第1種觀點的人,因為維基百科知道,搜尋
加密算法
的這類人,都是專業的。
現實工作中,這些開發可能會和産品、設計、營運、推廣等打交道,是以就養成了更多可以通俗易懂溝通的語言,把計算機程式設計上的屬于轉換為對方更容易了解的,這樣溝通才會更友善,協作效率更高,這個是沒錯的,我也支援這種(帶團隊溝通更容易了解)
但是在IT程式設計行業中,我更傾向于嚴謹,這也是一個開發人員必備的素質。
如果一個開發人員能做到專業内嚴謹(第1種觀點),溝通中靈活(第2種觀點),就非常厲害了,具備帶技術團隊的潛質。
本文為原創文章,轉載注明出處,歡迎掃碼關注公衆号 flysnow_org
或者網站asf https://www.flysnow.org/