凯撒密码原理(加解密)

凯撒密码的历史:

       最早由古罗马军事统帅盖乌斯·尤利乌斯·凯撒在军队中用来传递加密信息,故称凯撒密码。此为一种位移加密手段,只对26个(大小写)字母进行位移加密,规则相当简单,容易被破解。  

       凯撒密码属于替代加密,即用另一个字符来替换明文中的原字符,其中的对应关系只有加密者所知。而凯撒密码就是最简单的一种替代加密手段。

凯撒密码的原理:

       凯撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):

原文:abcdefg
密文:defghijk

a+3=d,b+3=e以此类推
为了保证都是字母,所以我们会对它取模mod 26
例如:(z+1)mod 26 = a
这样的意思

加解密算法如下:

加密算法如下:

Encode(x)=(x+n)mod 26

这里介绍两个函数:

chr()函数用一个范围在range(256)内的(就是0~255)整数作参数,返回一个对应的字符。返回值是当前整数对应的ASCII字符。该函数的返回值为字符串形式,例如输入chr(90),输出为 ‘Z’ 。

ord()函数与chr()函数对应,输入ASCII字符表中字符的字符串形式,返回为其在字符表中的排序位次。例如输入ord(‘a’),输出为97。

yuanwen = input("请输入要加密的字符串:") #输入原文
n = int(input("请输入加密的偏移量:")) #输入偏移量

miwen = ""
for i in yuanwen: #取出每一个字符向右偏移n位
    if i >= 'a' and i <= 'z':
        miwen = miwen + chr((ord(i)-ord('a') + n) % 26+ord('a'))
    if i >='A' and i <= 'Z':
        miwen = miwen + chr((ord(i) - ord('A') + n) % 26 + ord('A'))
print(miwen)

测试结果如图:

解密算法如下:

decode(x)=(x-n) mod 26

代码如下:

miwen = input("输入需要解密的密文:")
n = int(input("输入偏移量:"))
yuanwen = ""
for i in miwen:
    if i >= 'a' and i <= 'z':
        yuanwen = yuanwen + chr((ord(i) - ord('a') - n) % 26 + ord('a'))
    if i >= 'A' and i <= 'Z':
        yuanwen = yuanwen + chr((ord(i) - ord('A') - n) % 26 + ord('A'))
print(yuanwen)

测试结果如图:

凯撒密码原理和加解密就是这么简单di!!!
tips:本人写的代码比较简单,没有考虑一些特殊情况,例如空格啊,或者遇到其他的字符,但是可以在这个代码的基础上自行修改满足所需条件。
如:空格就不偏移,那就跳过那一次循环,如果遇到别的字符看是否要转换,不转换也可以跳过等!!!

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
凯撒密码是一种最简单的加密算法,它的原理是将明文中的每个字母按照一定的规则进行位移,从而得到密文。具体来说,就是将每个字母往后移动k个位置,k为加密密钥。 下面是Python实现凯撒密码加密解密的代码: ```python def caesar_encrypt(plaintext, key): """ 凯撒密码加密函数 :param plaintext: 明文 :param key: 密钥,即位移量 :return: 密文 """ ciphertext = '' for char in plaintext: if char.isalpha(): # 如果是字母,进行加密 if char.isupper(): ciphertext += chr((ord(char) - 65 + key) % 26 + 65) else: ciphertext += chr((ord(char) - 97 + key) % 26 + 97) else: # 如果不是字母,直接添加 ciphertext += char return ciphertext def caesar_decrypt(ciphertext, key): """ 凯撒密码解密函数 :param ciphertext: 密文 :param key: 密钥,即位移量 :return: 明文 """ plaintext = '' for char in ciphertext: if char.isalpha(): # 如果是字母,进行解密 if char.isupper(): plaintext += chr((ord(char) - 65 - key) % 26 + 65) else: plaintext += chr((ord(char) - 97 - key) % 26 + 97) else: # 如果不是字母,直接添加 plaintext += char return plaintext ``` 使用示例: ```python # 加密 plaintext = 'hello, world!' key = 3 ciphertext = caesar_encrypt(plaintext, key) print(ciphertext) # 输出:khoor, zruog! # 解密 key = 3 plaintext = caesar_decrypt(ciphertext, key) print(plaintext) # 输出:hello, world! ``` 注意:凯撒密码加密解密都是用同一个函数实现的,只需要传入不同的参数即可。为了方便起见,这里将加密和解密放在了同一个文件中,实际使用时可以根据需要将它们放在不同的文件里。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值