在密碼學中,密碼(英語:cipher,或cypher),是一種用於執行加密解密演算法——一系列可以作為一個過程來遵循的定義明確的步驟。另一個不太常見的術語是加密encipherment)。加密或編碼(encode)的目的是將明文的資訊轉換為密文(密碼或代碼)。

愛德華·拉森(Edward Larsson)的符文密碼類似於肯辛頓符石英語Kensington Runestone上的符文密碼。 還包括與禮節無關的哥特體寫作風格和豬圈密碼

通常的說法中,「密碼」(cipher)與「代碼」(code)是同義的,因為它們都是一組加密訊息的步驟;然而,它們在密碼學中的概念是不同的,特別是在經典密碼學中。

具體而言,代碼通常會在輸出中替換不同長度的字串,其操作一般通過代碼本來進行,它將單詞或短語連結到一系列隨機的字串或數字。例如,「UQJHSE」可能是「繼續執行以下坐標」的代碼。

而相應的,密碼一般會替換與輸入相同數量的字元。一些例外情況中,某些密碼系統在輸出時可能會使用稍多或更少的字元,而非輸入的長度。當使用密碼時,原始資訊被稱為明文(plain text),而加密的形式被稱為密文(cipher text)。密文訊息包含明文訊息的所有資訊,但若沒有適當的機制解密它,人或電腦是不能讀取的。

密碼的操作通常取決於一個輔助資訊,稱為「金鑰」(或者,按照傳統 NSA 的說法,密碼變數——cryptovariable)。加密過程根據金鑰而變化,它改變了演算法的具體操作。在使用密碼加密訊息之前,必須選擇一個金鑰。在不知道金鑰的情況下,將結果密文解密為可讀的明文應該是非常困難的(甚至是不可實現的)。

大多數現代密碼可以用幾種方式分類:

  • 以加密流程區分,可以分成處理通常具有固定大小的塊符號(區塊加密法)還是符號連續流(流加密)兩種主要演算法。
  • 以金鑰性質區分,可以分成通過相同的金鑰來進行加密解密的演算法(對稱金鑰加密),或每次加密都使用了不同的金鑰的演算法(公開金鑰加密)。如果演算法是對稱的,則金鑰必須令接收者和傳送者及其他人知道。如果該演算法是非對稱演算法,則加密金鑰與解密金鑰不同但密切相關。如果一個金鑰不能從另一個中推導出來,則非對稱金鑰演算法具有公鑰/私鑰屬性,並且其中一個金鑰可以在不失機密性的情況下公開。