介绍
根据苏维托尼乌斯于公元二世纪写的《恺撒传》中的记载 [4],恺撒曾用此方法对重要的军事信息进行加密:
如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第4个字母置换第一个字母,即以D代A,余此类推。
同样,奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回。每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;他用A代表Z。
简而言之,就是将真正的信件内容(明文)中的每一个字母用其后的第N个字母代替,转换成一封密信(密文)。这样,即便敌军截住信件,也不知其意。据说,这种加密方法在当时的古罗马颇为流行。这种将字母表中的字母移动一定位置而实现加密的方法,被称为“恺撒移位密码”,简称“恺撒密码”。移动的位数N就是加密和解密的密钥。
另外,有证据表明,恺撒曾经使用过更为复杂的密码系统:文法学家普罗布斯曾经写过一份独具创新的手稿,研究恺撒书信中包含有秘密信息的字母。
已经无法弄清恺撒密码在当时有多大的效果,但是有理由相信它是安全的。因为恺撒大部分敌人都是目不识丁的,而其余的则可能将这些消息当作是某个未知的外语。即使有某个敌人获取了恺撒的加密信息,根据现有的记载,当时也没有任何技术能够解决这一最基本、最简单的替换密码。现存最早的破解方法记载在公元9世纪阿拉伯的阿尔·肯迪的有关发现频率分析的著作中。
概念
在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
Python凯撒密码简介
Python的凯撒密码是一种简单的加密算法,它通过将明文中的每个字母按照一个固定的偏移量进行移动来进行加密。这个偏移量通常称为“密钥”。例如,如果密钥为3,那么明文中的字母A就会被替换为D,B会被替换为E,以此类推。
凯撒密码通常用于简单的加密和解密需求,但它并不是一种安全的加密算法,因为它的加密方式相对简单,容易被破解。在实际应用中,凯撒密码更多地被用作学习加密算法的入门示例,而不是用于真正的安全通信。
def encrypt(text, key):
result = ""
for char in text:
if char.isupper():
result += chr((ord(char) + key - 65) % 26 + 65)
elif char.islower():
result += chr((ord(char) + key - 97) % 26 + 97)
elif char.isdigit():
result += str((int(char) + key) % 10)
else:
result += char
return result
def decrypt(ciphertext, key):
result = ""
for char in ciphertext:
if char.isupper():
result += chr((ord(char) - key - 65) % 26 + 65)
elif char.islower():
result += chr((ord(char) - key - 97) % 26 + 97)
elif char.isdigit():
result += str((int(char) - key) % 10)
else:
result += char
return result
def caesar_encrypt(text, key):
return encrypt(text, key)
def caesar_decrypt(ciphertext, key):
return decrypt(ciphertext, key)
plaintext = input("请输入明文:")
key = int(input("请输入密钥:"))
# 加密
ciphertext = caesar_encrypt(plaintext, key)
print("加密后的密文为:", ciphertext)
# 解密
recovered_plaintext = caesar_decrypt(ciphertext, key)
print("解密后的明文为:", recovered_plaintext)
caesar_cipher_encrypt
用于对文本进行加密,caesar_cipher_decrypt
用于对密文进行解密。这两个函数都采用了凯撒密码的加密和解密原理,通过对文本中的每个字母进行偏移来实现加密和解密操作。
ord(char)
返回字符 char
对应的 ASCII 值,例如 ord('A')
返回 65,ord('B')
返回 66,依此类推。
chr(num)
则是 ord
函数的反操作,它接受一个 ASCII 值 num
并返回对应的字符。例如 chr(65)
返回 'A',chr(66)
返回 'B'。
在凯撒密码的解密过程中,chr((ord(char) - shift - 65) % 26 + 65)
的作用是将字符 char
的 ASCII 值减去偏移量 shift
,然后对结果取模 26(26 是字母表中字母的总数),最后加上 65(或者 97,取决于字符是大写还是小写字母)以得到解密后的字符的 ASCII 值。
return result
是 Python 中的一个语句,用于从函数中返回一个值。在这个上下文中,result
是经过加密或解密处理后得到的结果,通过 return result
将这个结果返回给调用函数的地方。
在示例代码中,caesar_cipher_encrypt
和 caesar_cipher_decrypt
函数都包含了 return result
语句,它们分别返回加密后的文本和解密后的文本。这样,当你调用这些函数时,就可以获得相应的加密或解密结果。