做爲開發人員,正確使用專業詞語是一項基本功,也是表達能力的體現。錯誤的使用專業術語,可能會讓面試官以爲你在不懂裝懂,以致於錯失心儀職位。程序員
就我我的所見,有三個詞最常常被錯誤使用,特別是初學者。那就是「轉碼」、「簽名」和「加密」。面試
不少初學者把一段內容從看得懂的格式變爲看不懂的格式,通通叫作「加密」,因而出現所謂「MD5加密」、「Base64加密」這類錯誤說法。本文將介紹「轉碼」、「簽名」和「加密」三個概念的區別,以幫助初學者正確使用這些術語。算法
轉碼是指將一段內容從一種編碼轉換爲另外一種編碼。轉碼不會修改內容,其目的是爲了知足內容傳輸格式的須要。安全
例如 Base64 編碼,它能夠將任何二進制內容轉爲 ascii 字符串,這樣咱們就能夠在任何只容許傳輸字符串的協議中使用二進制內容了,傳輸協議的接收端收到 Base64 編碼的內容,能夠將其還原成二進制格式。編碼
除此以外常見的轉碼還有 URL 編碼和 hex 編碼等等。他們的共同點是:內容能夠根據約定的算法,在不一樣的格式間獨立轉換,也就是轉換過程不須要藉助額外的內容。加密
上面說的獨立轉換,也就是轉換過程不須要藉助額外的內容,是什麼意思呢?設計
加密也一樣是一種格式轉換,但轉換的過程當中就須要額外內容,也就是加密密鑰。對應的,解密的時候也會須要解密密鑰。ci
這就是轉碼和加密的區別。若是一我的把轉碼說成是加密,說明這我的在系統安全方面存在錯誤的理解,讓其參與系統設計可能會影響系統的安全性。開發
轉碼和加密都是可逆的,它們的目的都是保證內容在格式受到限制的條件下,可以完整的傳輸或存儲。字符串
可是簽名就不同了。簽名的做用是用一份簡短的內容來檢查一份很長的內容是否正確。
例如經過 MD5 算法,能夠將一個 1GB 大小的文件生成一個只有 32 字節長的 MD5 簽名。一旦這個文件修改了任何一個字節,再次生成的 MD5 簽名就會徹底不同。
到這你就能理解,爲何簽名算法是不可逆的,你不可能將一個 32 字節的簽名從新還原成一個 1GB 的文件。因此無論將簽名看成是轉碼仍是加密,都屬於很是嚴重的誤解。輕者你可能會只留下簽名而刪掉原內容,嚴重狀況下,其餘程序員會由於你不理解什麼是簽名而瞧不起你。