1. 轉(zhuǎn)義算法
轉(zhuǎn)義算法可以把一個字符轉(zhuǎn)換為另一個(組)字符苫费。
轉(zhuǎn)義算法有以下幾個特點:
- 算法和字符映射表是公開的
- 轉(zhuǎn)換操作是可逆的
- 轉(zhuǎn)換后的數(shù)據(jù)長度和原文長度正相關(guān)汤锨。
常見的轉(zhuǎn)義算法有urlencode、base64百框。
其中urlencode主要對url編碼以解決url請求參數(shù)中的中文字符闲礼、特殊字符等的傳遞操作。而base64的應(yīng)用比較廣泛铐维,這種算法可以將任意形式的數(shù)據(jù)轉(zhuǎn)換為僅由64個字符組成的數(shù)據(jù)串柬泽。
有很多在線工具可以做編碼解碼操作,比如可以在這里做urlencode操作方椎,效果如下:
需要注意的是聂抢,這里是對整個文本內(nèi)容進行了encode钧嘶,所以內(nèi)容中的:// 都被編碼了棠众,在實際使用時要按需進行轉(zhuǎn)換。
base64也有線上工具,比如這里闸拿,效果如下:
2. 摘要算法
摘要算法能把一組任意長度的數(shù)據(jù)映射到一個固定長度的數(shù)據(jù)上空盼。
摘要算法有以下特點:
- 算法是公開的
- 轉(zhuǎn)換操作是不可逆的
- 轉(zhuǎn)換后的數(shù)據(jù)長度和原文長度無關(guān)
- 摘要結(jié)果通常以16進制的形式表現(xiàn)
常見的摘要算法有MD5、SHA-1新荤、SHA-256等揽趾。
摘要算法主要用于文件內(nèi)容校驗,比如網(wǎng)站提供一個較大文件同時附上其MD5值(或其他摘要算法值)苛骨,用戶在下載完成后只需要對比一下本地文件的MD5值和網(wǎng)站上提供的是否一致篱瞎,就可以知道下載的問題是否有損壞了。
比如下面這樣的
值得注意的是俐筋,因為摘要長度是有限的,所以理論上會出現(xiàn)兩個數(shù)據(jù)的摘要結(jié)果相同的情況严衬。比如MD5的長度是32位16進制澄者,總數(shù)也就是2128個,那么如果有2128+1個文件求MD5请琳,那么必然有兩個文件的結(jié)果是一樣的粱挡。不過由于這個數(shù)據(jù)實在是太大了,所以可以忽略俄精。
2004年询筏,有人破解了MD5(論文在這里),但實際上他并不是通過MD5結(jié)果計算出了原文嘀倒,而是通過某種算法組合出了一組數(shù)據(jù)屈留,令其MD5結(jié)果和目標一致。
3. 加密算法
加密算法就是通過某種手段將原文轉(zhuǎn)換為密文测蘑。正常情況下灌危,沒有秘鑰是無法將密文還原成原文的。
加密算法有以下幾個特點:
- 算法可以是公開的
- 算法要和秘鑰配合使用碳胳,而秘鑰不是公開的
- 轉(zhuǎn)換操作是可逆的勇蝙,但是必須使用秘鑰
- 轉(zhuǎn)換后的長度和原文長度正相關(guān)
加密算法又分為對稱加密和非對稱加密,區(qū)別在于對稱加密中加密和解密的秘鑰是同一個挨约,而非對稱加密中加密和解密的秘鑰是不同的味混。
常見的對稱加密算法有AES、DES诫惭,非對稱加密算法有RSA翁锡、DSA等。
非對稱加密只能加密固定長度的數(shù)據(jù)且算法效率低(相對對稱加密而言)夕土,一般用于簽名校驗和秘鑰(用于對稱加密)傳遞的場景馆衔。
4. 簽名和驗簽
簽名不是一種算法瘟判,但是他用到了上面提到的摘要算法和非對稱加密算法。
簽名的意義在于告訴接收者數(shù)據(jù)確實是我的而不是別人偽造的角溃。(含義類似于消費時在刷卡單上簽名拷获。) 比如Google發(fā)布了一款A(yù)pp并對App進行了簽名,當用戶設(shè)備上下載了該App后减细,通過驗簽操作就可以確認這個App確實是Google發(fā)布的匆瓜。
下面我們看一下簽名和驗簽操作是如何進行的。
首先對原文做摘要計算未蝌,然后使用非對稱加密的私鑰進行加密驮吱。
然后當客戶拿到數(shù)據(jù)后,先對原文做摘要萧吠,并對密文進行解密(解密秘鑰是公鑰糠馆,任何人都能獲得),然后對比二者是否一致怎憋,如果一致則可以確認信息的來源又碌。