当前位置:   article > 正文

Python凯撒密码_凯赛密码python

凯赛密码python

目录

一、凯撒密码

历史

概念

二、Python实现凯撒密码

三、测试


一、凯撒密码

密码学中,恺撒密码(英语: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系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。


二、Python实现凯撒密码

  1. def caesar_encrypt(text, key):
  2. result = ""
  3. for char in text:
  4. if char.isalpha():
  5. start = ord('a') if char.islower() else ord('A')
  6. result += chr((ord(char) - start + key) % 26 + start)
  7. elif char.isnumeric():
  8. result += chr((int(char) + key) % 10 + ord('0'))
  9. else:
  10. result += chr((ord(char) + key) % 128)
  11. return result
  12. def caesar_decrypt(text, key):
  13. return caesar_encrypt(text, -key)
  14. def get_valid_key():
  15. while True:
  16. key_input = input("请输入密钥: ")
  17. try:
  18. key = int(key_input)
  19. return key
  20. except ValueError:
  21. try:
  22. key = sum(ord(char) for char in key_input)
  23. return key
  24. except TypeError:
  25. print("无效的密钥,请重新输入一个整数或包含字母的字符串。")
  26. def main():
  27. text = input("请输入明文或者密文: ")
  28. key = get_valid_key()
  29. encrypt_or_decrypt = input("请选择加密(E)或解密(D): ")
  30. if encrypt_or_decrypt.upper() == 'E':
  31. result = caesar_encrypt(text, key)
  32. print("\n加密结果:", result)
  33. elif encrypt_or_decrypt.upper() == 'D':
  34. result = caesar_decrypt(text, key)
  35. print("\n解密结果:", result)
  36. else:
  37. print("无效的选择,请输入 'E' 或 'D'.")
  38. input("按下回车键退出程序")
  39. if __name__ == "__main__":
  40. main()

caesar_encrypt(text, key) 函数用于加密文本。它遍历输入文本中的每个字符,根据字符的类型进行不同的处理

caesar_decrypt(text, key) 函数用于解密文本实际上是调用了 caesar_encrypt 函数,传入负的偏移量(-key)。

get_valid_key() 函数用于获取有效的加密/解密密钥。它通过循环等待用户输入,尝试将输入解释为整数。如果输入无效,则尝试将字符的 ASCII 码之和作为密钥。如果依然无效,则要求用户重新输入。

main() 函数是程序的主要入口。它首先获取用户输入的明文或密文,然后调用 get_valid_key() 获取有效的密钥。接着,用户被要求选择加密(E)或解密(D)。根据选择,调用相应的加密或解密函数,并输出结果。


三、测试

:​​凯撒密码百度百科

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/476171
推荐阅读
相关标签
  

闽ICP备14008679号