凯撒密码加解密及破解实现原理

概念及原理

根据百度百科上的解释,凯撒密码是一种古老的加密算法。

密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就可以破译。 现今又叫“移位密码”,只不过移动的为数不一定是3位而已。

密码术可以大致别分为两种,即易位和替换,当然也有两者结合的更复杂的方法。在易位中字母不变,位置改变;替换中字母改变,位置不变。

将替换密码用于军事用途的第一个文件记载是恺撒著的《高卢记》。恺撒描述了他如何将密信送到正处在被围困、濒临投降的西塞罗。其中罗马字母被替换成希腊字母使得敌人根本无法看懂信息。

苏托尼厄斯在公元二世纪写的《恺撒传》中对恺撒用过的其中一种替换密码作了详细的描写。恺撒只是简单地把信息中的每一个字母用字母表中的该字母后的第三个字母代替。这种密码替换通常叫做恺撒移位密码,或简单的说,恺撒密码。

在密码学中,凯撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术。这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。

说了这么多,相信大家可能也有点晕了,下面这张图加密方法就是错三个位来实现加密功能

              

(1)  设计思想:

  1. 由于输入的是一串英文字符,所以我们用String类来编写,况且String类有许多方法可以调用
  2. 错位需要对每个字符进行操作,可以把字符串转换为字符数组,调用的是string类的toCharArray方法
  3. 由于string类也是采用Unicode字符集,所以我们进行错位操作时只需读取一个字符,然后与数字3相加,再转换为char类型,就实现了错3位加密操作,解密则减3.
  4. 在加密操作中,如果加密的是字母表最后三个,则必须实现循环操作,即X加密后是A,Y加密后是B,Z加密后是C,实现这个就要用到ASCII码,当读到XYZ时,加密则是减去23后转换为char类型,当然,解密时读到ABC加上23即可

(2)  程序流程图:

                            

 

实现过程

我们定义个key=13,此时我们对字符串This is my secret message进行加密

import
  • 4
    点赞
  • 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、付费专栏及课程。

余额充值