为什么使用异或进行一次性密码本?

我们使用异或门作为一次性密码本。我们可以用AND门和OR门吗?为什么能用或者不能用?

AND和OR没有加密作用,这意味着加密后是无法解密的。而异或就支持解密,且十分简单。只需要将原始代码和秘钥进行异或运算即可得到加密后密码,再将加密后密码与秘钥进行异或运算即可轻松解密。
例如:

>>> code = 0b10101010
>>> key = 0b10010010
>>> secret_code = code ^ key #code和秘钥key进行异或运算得到加密后代码
>>> bin(secret_code)
'0b111000'
>>> bin(secret_code ^ key) #将加密后代码和秘钥key得到原始代码code
'0b10101010'
>>> 

经香农(C.E.Shannon)在1949年用数学证明:一次性密码本是无条件安全的,理论上是无法破译的。