python3实现凯撒加密

本文详细介绍了凯撒密码的加密原理,一种基于字母表固定偏移的替换加密技术,并提供了使用Python3实现的凯撒加密与解密代码示例。

凯撒加密原理

恺撒密码是一种替换加密方式技术。它的加密原理是明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。根据偏移量的不同,还存在若干特定的恺撒密码名称:

  • 偏移量为10:Avocat(A→K)
  • 偏移量为13:ROT13
  • 偏移量为-5:Cassis (K6)
  • 偏移量为-6:Cassette (K7)

例如,当偏移量是左移3的时候(解密时的密钥就是3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ ;
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC。
这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

python3实现凯撒加密解密

# encoding: utf-8
# encoding: utf-8
"""
@description: 凯撒密码
@author: baola
@time: 2020-06-10 20:14
@file: CaesarCrypto.py
@version: python3.8.1
"""

def CaesarEncode(crypto_str, shift):
    """
    凯撒加密
    :param crypto_str: 要加密的明文
    :param shift: 偏移量
    :return: 返回加密后的密文
    """
    result = ""
    num =int(shift)
    for word in crypto_str:
        ch = ord(word)
        if (ord('a') <= ch <= ord('z')):
            ch += num
            if ch > ord('z'):
                ch -= 26

        if (ord('A') <= ch <= ord('Z')):
            ch += num
            if ch > ord('Z'):
                ch -= 26
        result += chr(ch)
    return result

def CaesarDecode(crypto_str, shift):
    """
    凯撒解密
    :param crypto_str: 要解密的密文
    :param shift: 偏移量
    :return: 返回解密后问明文
    """
    result = ""
    num = int(shift)
    for word in crypto_str:
        ch = ord(word)
        if (ord('a') <= ch <= ord('z')):
            ch -= num
            if ch < ord('a'):
                ch += 26

        if (ord('A') <= ch <= ord('Z')):
            ch -= num
            if ch < ord('A'):
                ch += 26
        result += chr(ch)
    return result

#解密:全部遍历
# for i in range(1,26):
#     print(i,":",CaesarDecode("oknqdbqmoq{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz}",i))

shift = 0 #偏移量
str = "" #文本
# #解密
# print(CaesarDecode(str,shift))
# #加密
# print(CaesarEncode(str,shift))

本人水平有限,文章难免存在疏漏和不足之处,欢迎广大读者朋友批评指正。

使用 Python 函数实现凯撒加密和解密,有以下几种方法: ### 方法一:使用`string`模块创建映射表 ```python import string def kaisa_jiami(s, k): lower = string.ascii_lowercase upper = string.ascii_uppercase before = string.ascii_letters after = lower[k:] + lower[:k] + upper[k:] + upper[:k] table = &#39;&#39;.maketrans(before, after) return s.translate(table) def kaisa_jiemi(s, k): lower = string.ascii_lowercase upper = string.ascii_uppercase before = string.ascii_letters after = lower[k:] + lower[:k] + upper[k:] + upper[:k] table = &#39;&#39;.maketrans(after, before) return s.translate(table) def main(): s = input("请输入要加密的字符串:") k = int(input("请输入一个整数密钥:")) print(&#39;需要加密的字符串为:&#39;, s) a = kaisa_jiami(s, k) print("加密后为:", a) b = kaisa_jiemi(a, k) print("解密后为:", b) if __name__ == &#39;__main__&#39;: main() ``` 此方法先分别获取小写、大写英文字母表以及全部英文字母表,然后通过密钥`k`构建循环字母表,创建映射表实现加密和解密。主函数中接收用户输入的字符串和密钥,调用加密和解密函数并输出结果[^1]。 ### 方法二:通过`ascii_lowercase`实现 ```python from string import ascii_lowercase lows = ascii_lowercase ups = lows.upper() def kasa(s, k, ok=True): k = k % len(lows) before = lows + ups after = lows[k:] + lows[:k] + ups[k:] + ups[:k] if ok == True: table = &#39;&#39;.maketrans(before, after) else: table = &#39;&#39;.maketrans(after, before) return s.translate(table) s = &#39;&#39;&#39;Created on Sat Jan 30 13:39:20 2021 @author: yezq&#39;&#39;&#39; k = 12334343 sa = kasa(s, k) print(&#39;原文:\n&#39;, s) print(&#39;加密:\n&#39;, sa) sb = kasa(sa, k, None) print(&#39;解密:\n&#39;, sb) ``` 该方法从`string`模块导入`ascii_lowercase`获取小写字母表,通过取模操作处理密钥,根据`ok`参数的值创建不同的映射表,实现加密和解密功能。代码中还给出了一个示例,对字符串进行加密和解密并输出结果[^2]。 ### 方法三:利用字符对应的 ASCII 码进行移位 ```python # 编码 def encode(x): for i in x: if i.isspace(): print(&#39; &#39;, end=&#39;&#39;) continue new_c = ord(i) - 29 if new_c > 90: new_c -= 26 print(f&#39;{chr(new_c)}&#39;, end=&#39;&#39;) # 解码 def decode(x): for i in x: if i.isspace(): print(&#39; &#39;, end=&#39;&#39;) continue new_c = ord(i) + 29 if new_c < 97: new_c += 26 print(f&#39;{chr(new_c)}&#39;, end=&#39;&#39;) # 主程序入口 c = input(&#39;输入明文:&#39;) if c.islower(): print(&#39;加密后为: &#39;, end=&#39;&#39;) encode(c) elif c.isupper(): print(&#39;解密后为:&#39;, end=&#39;&#39;) decode(c) else: print(&#39;输入错误!&#39;) ``` 此方法利用`ord()`函数获取字符的 ASCII 码,通过移位操作实现加密和解密。在主程序入口,根据输入字符串的大小写情况调用相应的加密或解密函数,若输入不符合要求则提示错误[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值