【一起学加密2】凯撒密码是什么以及python实现?

凯撒密码原理

在这里插入图片描述
密码进行平移对应,比如k1中的a对应k2的D,b对应E…构建一个k1对应k2的查询表。

我们可以用下方的形式表示:
在这里插入图片描述
函数对应关系为:拥有这个函数对应关系,我们可以很简单地写出代码
在这里插入图片描述

凯撒密码加密的python实现

假设我们要对"ATTACK"这个字符串进行凯撒密码转换,那么我们需要创建一个查询表,使得其原字母对应到另一个密码表上。

创建新的字典

那么我们要使用到string.ascii_letters,这个函数是有什么作用呢?
在这里插入图片描述
可以看到其作用,假设我们只需要大写的字母:
在这里插入图片描述

随后,我们利用公式创建新的查询表:

import string

message = "ATTACK"

# shift = 3
# A ->
# T ->
# C ->
# K ->

cipher_text = ""

letters = string.ascii_letters[26:]

key = {}

shift = 3
i = 0
for c in letters:
    key[c] = letters[(i+shift) % 26] #产生新的字典
    i = i + 1

print(key)

运行结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随后,我们可以通过查询这个字典进行加密。

用以下几行代码实现:

cipher_text = ""
for c in message:
    cipher_text += key[c]

print(cipher_text)

输出结果为:DWWDFN
在这里插入图片描述

加密代码

将代码一般化获得:

import string

def generate_key(shift):
    letters = string.ascii_letters[26:]
    key = {}
    i = 0
    for c in letters:
        key[c] = letters[(i+shift) % len(letters)]
        i = i + 1

    return key

def encrypt(key, message):
    cipher = ""
    for c in message:
        cipher += key[c]

    print(cipher)
    return cipher

key = generate_key(3)
message = "ATTACK"
cipher_code = encrypt(key, message)

凯撒密码解密的python实现

def get_decryption_key(shift):
    letters = string.ascii_letters[26:]
    key = {}
    i = 0
    for c in letters:
       # key[c] = letters[(i-shift+len(letters)) % len(letters)]
        key[letters[(i+shift) % len(letters)]] = c

        i = i + 1
   # print(key)
    return key


def decrypt(key, message):
    plain_text = ""
    for c in message:
        plain_text += key[c]

    print(plain_text)
    return plain_text

测试结果:
在这里插入图片描述

思考

凯撒密码的安全性问题:

基于已有的字母表进行一个偏移,生成一个加密的字母表,这个偏移的大小有一定的范围(不可能大于26)。

导致生成加密的密钥有限,容易被暴力破解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值