在密码学中,密碼(英語:cipher,或cypher),是一种用于执行加密或解密的算法——一系列可以作为一个过程来遵循的定义明确的步骤。另一个不太常见的术语是加密(encipherment)。加密或编码(encode)的目的是将明文的信息转换为密文(密码或代码)。
通常的说法中,“密码”(cipher)与“代码”(code)是同义的,因为它们都是一组加密消息的步骤;然而,它们在密码学中的概念是不同的,特别是在经典密码学中。
具体而言,代码通常会在输出中替换不同长度的字符串,其操作一般通过代码本来进行,它将单词或短语链接到一系列随机的字符串或数字。例如,“UQJHSE”可能是“继续执行以下坐标”的代码。
而相应的,密码一般会替换与输入相同数量的字符。一些例外情况中,某些密码系统在输出时可能会使用稍多或更少的字符,而非输入的长度。当使用密码时,原始信息被称为明文(plain text),而加密的形式被称为密文(cipher text)。密文消息包含明文消息的所有信息,但若没有适当的机制解密它,人或计算机是不能读取的。
密码的操作通常取决于一个辅助信息,称为“密钥”(或者,按照传统 NSA 的说法,密码变量——cryptovariable)。加密过程根据密钥而变化,它改变了算法的具体操作。在使用密码加密消息之前,必须选择一个密钥。在不知道密钥的情况下,将结果密文解密为可读的明文应该是非常困难的(甚至是不可实现的)。
大多数现代密码可以用几种方式分类:
- 以加密流程区分,可以分成处理通常具有固定大小的块符号(分组密码)还是符号连续流(流加密)两种主要算法。
- 以密钥性质区分,可以分成通过相同的密钥来进行加密解密的算法(對稱密鑰加密),或每次加密都使用了不同的密钥的算法(公开密钥加密)。如果算法是对称的,则密钥必须令接收者和发送者及其他人知道。如果该算法是非对称算法,则加密密钥与解密密钥不同但密切相关。如果一个密钥不能从另一个中推导出来,则非对称密钥算法具有公钥/私钥属性,并且其中一个密钥可以在不失机密性的情况下公开。