base64為什麼不是加密?


3樓貓 發佈時間:2024-07-30 20:37:04 作者:山東大學招生處 Language

一聊到加密,大家也許會馬上聯想到凱撒密碼,base64,md5等名詞,但是事實上base64和md5都不是加密的手段,只不過被誤認為是一種加密,所以今天通過儘量通俗易懂的解釋和例子來說明md5、base64、甚至是霍夫曼編碼都不是加密,以及什麼是加密。

今天的文章分為三個部分,分別是加密的誤區,對稱加密和公鑰加密

加密的誤區

加密的一個形象化定義是,使用一個保密的密鑰,對一段信息進行處理,使其變得沒有規則,無法在沒有密鑰的情況下還原。下面我們利用這個簡單的定義來解釋加密的誤區。

首先是一系列編碼方式,比如ASCII碼,base64算法和霍夫曼編碼:

Base64是一種基於64個可打印字符來表示二進制數據的表示方法。由於2的6次方等於64,所以每6個比特為一個單元,對應某個可打印字符。3個字節有24個比特,對應於4個Base64單元,即3個字節可由4個可打印字符來表示。

base64為什麼不是加密?-第0張

Base64索引表

根據我們的通俗化定義,Base64並不是一種加密方式,我們的明文在使用Base64編碼後,仍通過公開的索引表直接還原為明文。因此,Base64只能作為一種數據的存儲格式,任何人都可以對其進行解碼。

同理,無論是霍夫曼碼還是其他編碼方式(漢明碼,rs碼等),都不是加密算法。

解釋完了編碼,下面聊一下hash為什麼不是加密算法。首先同樣的,我們引入hash的形象化定義:哈希(Hash)的目的是將目標文本轉換成具有相同長度的、不可逆的無規律字符串,重點在於不可逆二字,例如,設我們有兩段文本:“Microsoft”和“Google”。兩者使用某種哈希算法得到的結果分別為:“140864078AECA1C7C35B4BEB33C53C34”和“8B36E9207C24C76E6719268E49201D94”,任何人(包括哈希的計算者)都不能通過任何辦法對這兩段無規則字符串求逆得到原始值。所以顯然,hash算法例如mad5都不能作為加密算法,因為加密之後沒法解密。

base64為什麼不是加密?-第1張

最後一個問題,凱撒密碼是加密嗎?是加密,凱撒密碼屬於古典密碼學,即其符合加密的一般化定義(具有密鑰,加密,解密),但是其加密手法一定程度上已經被現代密碼學淘汰(當然移位和置換的思想被對稱密碼學繼承)。

什麼是對稱密碼

解釋完了加密的誤區,下面來聊一聊現代密碼學中的對稱密碼的定義和理解,所謂對稱,即使用相同的密鑰進行消息的加密與解密。因為這個特性,我們也稱這個密鑰為「共享密鑰(Shared Secret Key)」,示意圖如下:

base64為什麼不是加密?-第2張

一個通俗易懂的例子是,加密算法是一把門鎖,那麼對稱密鑰就是鑰匙,當我們出遠門時,會用鑰匙🔑把門鎖鎖上好幾圈,這就是加密的過程,當我們旅遊回家以後,再用相同的鑰匙開鎖,這就是解密的過程,整個過程都在使用同一個鑰匙,就是形象化的“對稱”。同時,對稱加密和對稱解密在結構上很大程度上是類似的,所以也稱為對稱加密。

base64為什麼不是加密?-第3張

DES流程

我們來簡單看一下DES(非常簡單的對稱加密算法)的流程,首先進行IP置換(初始置換),其實就是小朋友對號入座,順序參考下圖,一號座坐58號小朋友,二號座坐50號,以此類推,打散小朋友的順序。

base64為什麼不是加密?-第3張

置換表

然後進行正式的加密,DES加密算法共有重複的16個輪次,在每個輪次中,右半部分R0會作為下一輪次的左半部分L1的輸入。其次,R0會補位到48位和本輪次生成的48位密鑰K0輸入到F輪函數中去。F函數的輸出結果為32位,結果F(R0,K0)會和L0進行異或運算作為下一輪次右半部分R1的輸入。以此類推,重複16輪運算。

base64為什麼不是加密?-第3張

這部分通俗的解釋是,把要加密的信息分成兩半,右邊直接輸出到下一輪作為下一輪左邊的輸入,左邊和對稱密鑰一起輸入到一個加密函數F裡(也是類似於上面IP置換的置換),得到的結果與右邊信息異或後作為下一輪的右邊。

base64為什麼不是加密?-第3張

加密函數F的解釋

講完DES的加密,解密就很簡單了,在加密中,密鑰的作用是與左半邊逐位進行異或(a和b異或時,如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0),由於異或具有可逆的性質(即a與b異或後,再異或b可以得到a),所以DES解密算法是DES加密算法的逆,直接倒著運行一遍就能得到明文。

公鑰加密(非對稱加密)

講完了對稱密碼,再來講一下公鑰密碼,如何理解呢,公鑰加密體系中包括公鑰和私鑰,可以參考下圖:

base64為什麼不是加密?-第3張

每個人都有鎖A的鑰匙,給你寄信時,只需要打開你的郵箱就可以投遞,但是一旦投遞,信就會掉到郵箱底部,你無法對其進行解密,只有郵箱主人利用自己的私鑰(也就是鎖B的鑰匙)可以打開底部的鎖,拿出底部的信。

base64為什麼不是加密?-第3張

那麼這個天才的想法該怎麼實現呢?我們引入困難問題這個概念,這個概念在我之前的文章NP和P的關係,即正著算很簡單,但是反著算很難,比如你有兩個素數17和33,他們的乘積是561,但看561想把它分解回去,只能從2開始除,全部試一遍,當兩個素數很大的時候,計算乘積的分解是NP難的,下面我們解釋如何利用這個因子分解問題來構建最經典的公鑰加密算法RSA。

小黑盒沒法打公式,我就在自己電腦裡寫好過程截圖吧,RSA加密過程用最簡單的話說是這樣的:

base64為什麼不是加密?-第3張

RSA 算法的安全性基於大整數的質因數分解的困難性. 由於目前沒有能在多項式時間內對整數作質因數分解的算法, 因此無法在可行的時間內把 n 分解成 p 和 q 的乘積,所以在不知道私鑰的情況進行解密。

公鑰加密的構建都是這樣的,選擇一個數學困難問題作為單項陷門進行加密算法設計。

文章的最後總結一下,數據加密在如今這個信息化的時代尤為重要,所以必須分清楚什麼是加密,避免在編程或信息傳遞時使用錯誤的方式進行加密從而導致信息洩露。


© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com