1、編碼、摘要、加密的區別:
相同點:
三種方式都是通過某種公開的算法將原始信息進行編碼 /加密
不同點:
編碼:將數據轉化成某種固定的格式的編碼信息,方便不同系統間的傳輸,通過解碼編碼信息可以得到原始信息
哈希(又稱為摘要、散列):驗證信息的唯一性,不能通過哈希值還原原始信息
加密:加密傳輸信息,保證信息的安全性,通過密鑰和密文可以還原原始信息
編碼、哈希、加密的區別:經常看到有人混淆這幾個概念,把 md5、sha256 甚至還有 Base64 當作加密算法,弄不清楚摘要、編碼、加密的區別,下面就這幾個概念結合幾個例子來區分以下。
編碼:
編碼本質上是信息形式的轉化。編碼的目的不是為了加密信息,是將消息轉化成統一的格式,方便在不同系統之中傳輸。例如最常見的ASCII字符編碼。由於網絡上只能傳輸二進制數據,任何數據如果想要經由網絡傳輸,就必須先轉化成二進制,ASCII 提供了一個將A、B、C等字母轉化為二進制的規則。
信息—>編碼—>二進制—>解碼—>信息
通過解碼可以還原原始信息
例子:ASCII, Unicode, URL Encoding, Base64等
摘要(哈希):
摘要的目的是為了校驗信息的完整性,保證信息在傳輸過程中不被篡改。例如你在網絡上需要下載一個非官方論壇軟件,但又擔心軟件被第三方篡改,可以將該軟件的md5值和官方下載的md5值進行對比,如果一致,則可放心使用。摘要算法有如下幾個特點:
輸入相同時,輸出一致;輸入不同時,輸出不同。通過輸出,不能計算出輸入 對輸入的任何細微修改,都會導致完全不同的輸出。
由於以上特性,摘要也常被用來給密碼加密,不過由於計算機運算能力的提升以及越來越豐富的破解手段,已不建議使用摘要算法來給密碼加密。
通過摘要信息不能還原原始信息。
例子:md5, sha系列
加密:
加密是為了保證數據安全傳輸,使得其他人不能獲取的具體信息內容。例如你想給某人發送一封密信,或通過互聯網給人發送密碼,這些對隱秘性要求比較強的事情,就需要對信息進行加密。
加密的專注點不在可用性上,這點和編碼有明顯的區別。加密是可逆的,明文 + 秘鑰 = 加密信息
加密又分為對稱加密和非對稱加密,區別在於在加密和解密信息時秘鑰是不是同一個。
加密信息能通過密鑰被還原為原始信息
對稱加密:DES, AES
非對稱加密: RSA。
2、java中的編碼/解碼 、加密/解密的代碼:
詳見代碼