加密和雜湊有什麼不同?


Posted by Wes on 2021-02-28

加密(Encryption)

在密碼學中,加密是將明文資訊改變為難以讀取的密文內容,使之不可讀的過程。只有擁有解密方法的物件,經由解密過程,才能將密文還原為正常可讀的內容。

加密演算法可以分為「對稱式加密」與「非對稱式加密」:

對稱式加密(Symmetric Encryption)

  • 加密和解密使用的金鑰是相同的
  • 金鑰長度太短的話,很容易被破解
  • 對稱加密的運算速度比公鑰加密快
  • 常見的演算法:AES、DES、3DES、⋯⋯

非對稱式加密(Asymmetric Encryption)

  • 需要兩個金鑰:公開金鑰(Public key)、私密金鑰(Private key)
  • 公鑰可以自由發布,私鑰則由使用者秘密保存
  • 通常使用公鑰加密,使用私鑰解密
  • 在數位簽章(Digital Signature)中,使用私鑰加密(相當於生成簽名),公鑰解密(相當於驗證簽名)
  • 常見的演算法:RSA、DSA、ECC、⋯⋯

雜湊(Hash)

  • 不固定長度的內容,經過雜湊演算法,輸出成固定長度的內容
  • 輸出的內容無法反推回原本輸入的內容
  • 相同輸入經過相同演算法,必定得到相同輸出
  • 不同輸入經過相同演算法,也可能得到相同輸出,機率非常低,這種情況稱為碰撞(Collision)
  • 常見的演算法:SHA-256、SHA-1、MD5、⋯⋯

加密和雜湊的差異

兩者最大的差別在於:「加密可逆,雜湊不可逆。」加密可以透過解密得到原文,雜湊無法逆向解出原始輸入。

一個安全資料庫應該儲存的是經過雜湊的密碼,而不是使用者輸入的明碼,萬一資料庫不慎遭到攻擊,駭客拿到的會是雜湊值,無法反推得到原始值,密碼只有使用者知道。

References


#Security #cryptography #Encryption #hash







Related Posts

[Data] 介紹一個好用的產生假資料網站

[Data] 介紹一個好用的產生假資料網站

React (1) - JSX

React (1) - JSX

How to build CICD with Jenkins as code based on container

How to build CICD with Jenkins as code based on container


Comments