赞
踩
目录
在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
根据苏维托尼乌斯于公元二世纪写的《恺撒传》中的记载 [4],恺撒曾用此方法对重要的军事信息进行加密: [1]
如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第4个字母置换第一个字母,即以D代A,余此类推。
同样,奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回。每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;他用A代表Z。
简而言之,就是将真正的信件内容(明文)中的每一个字母用其后的第N个字母代替,转换成一封密信(密文)。这样,即便敌军截住信件,也不知其意。据说,这种加密方法在当时的古罗马颇为流行。这种将字母表中的字母移动一定位置而实现加密的方法,被称为“恺撒移位密码”,简称“恺撒密码”。移动的位数N就是加密和解密的密钥。 [4]
另外,有证据表明,恺撒曾经使用过更为复杂的密码系统:文法学家普罗布斯曾经写过一份独具创新的手稿,研究恺撒书信中包含有秘密信息的字母。
已经无法弄清恺撒密码在当时有多大的效果,但是有理由相信它是安全的。因为恺撒大部分敌人都是目不识丁的,而其余的则可能将这些消息当作是某个未知的外语。即使有某个敌人获取了恺撒的加密信息,根据现有的记载,当时也没有任何技术能够解决这一最基本、最简单的替换密码。现存最早的破解方法记载在公元9世纪阿拉伯的阿尔·肯迪的有关发现频率分析的著作中。 [2]
在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
- def caesar_encrypt(text, key):
- result = ""
- for char in text:
- if char.isalpha():
- start = ord('a') if char.islower() else ord('A')
- result += chr((ord(char) - start + key) % 26 + start)
- elif char.isnumeric():
- result += chr((int(char) + key) % 10 + ord('0'))
- else:
- result += chr((ord(char) + key) % 128)
- return result
-
- def caesar_decrypt(text, key):
- return caesar_encrypt(text, -key)
-
- def get_valid_key():
- while True:
- key_input = input("请输入密钥: ")
- try:
- key = int(key_input)
- return key
- except ValueError:
- try:
- key = sum(ord(char) for char in key_input)
- return key
- except TypeError:
- print("无效的密钥,请重新输入一个整数或包含字母的字符串。")
-
- def main():
- text = input("请输入明文或者密文: ")
- key = get_valid_key()
-
- encrypt_or_decrypt = input("请选择加密(E)或解密(D): ")
-
- if encrypt_or_decrypt.upper() == 'E':
- result = caesar_encrypt(text, key)
- print("\n加密结果:", result)
- elif encrypt_or_decrypt.upper() == 'D':
- result = caesar_decrypt(text, key)
- print("\n解密结果:", result)
- else:
- print("无效的选择,请输入 'E' 或 'D'.")
-
- input("按下回车键退出程序")
-
- if __name__ == "__main__":
- main()
caesar_encrypt(text, key)
函数用于加密文本。它遍历输入文本中的每个字符,根据字符的类型进行不同的处理
caesar_decrypt(text, key)
函数用于解密文本,实际上是调用了 caesar_encrypt
函数,传入负的偏移量(-key)。
get_valid_key()
函数用于获取有效的加密/解密密钥。它通过循环等待用户输入,尝试将输入解释为整数。如果输入无效,则尝试将字符的 ASCII 码之和作为密钥。如果依然无效,则要求用户重新输入。
main()
函数是程序的主要入口。它首先获取用户输入的明文或密文,然后调用 get_valid_key()
获取有效的密钥。接着,用户被要求选择加密(E)或解密(D)。根据选择,调用相应的加密或解密函数,并输出结果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。