加密(Encryption)
在密碼學中,加密是將明文資訊改變為難以讀取的密文內容,使之不可讀的過程。只有擁有解密方法的物件,經由解密過程,才能將密文還原為正常可讀的內容。
加密演算法可以分為「對稱式加密」與「非對稱式加密」:
對稱式加密(Symmetric Encryption)
- 加密和解密使用的金鑰是相同的
- 金鑰長度太短的話,很容易被破解
- 對稱加密的運算速度比公鑰加密快
- 常見的演算法:AES、DES、3DES、⋯⋯
非對稱式加密(Asymmetric Encryption)
- 需要兩個金鑰:公開金鑰(Public key)、私密金鑰(Private key)
- 公鑰可以自由發布,私鑰則由使用者秘密保存
- 通常使用公鑰加密,使用私鑰解密
- 在數位簽章(Digital Signature)中,使用私鑰加密(相當於生成簽名),公鑰解密(相當於驗證簽名)
- 常見的演算法:RSA、DSA、ECC、⋯⋯
雜湊(Hash)
- 不固定長度的內容,經過雜湊演算法,輸出成固定長度的內容
- 輸出的內容無法反推回原本輸入的內容
- 相同輸入經過相同演算法,必定得到相同輸出
- 不同輸入經過相同演算法,也可能得到相同輸出,機率非常低,這種情況稱為碰撞(Collision)
- 常見的演算法:SHA-256、SHA-1、MD5、⋯⋯
加密和雜湊的差異
兩者最大的差別在於:「加密可逆,雜湊不可逆。」加密可以透過解密得到原文,雜湊無法逆向解出原始輸入。
一個安全資料庫應該儲存的是經過雜湊的密碼,而不是使用者輸入的明碼,萬一資料庫不慎遭到攻擊,駭客拿到的會是雜湊值,無法反推得到原始值,密碼只有使用者知道。