Python编程:实现凯撒密码加密解密

简介: Python编程:实现凯撒密码加密解密

凯撒密码

原理:

通过把字母移动一定的位数来实现加解密


明文中的所有字母从字母表向后(或向前)按照一个固定步长进行偏移后被替换成密文。


例如:

当步长为3时,A被替换成D,B被替换成E,依此类推,X替换成A。

image.png


在密码学中,用于解决复杂问题的步骤,称为一种算法

加密算法: 从明文到密文的过程

解密算法: 从密文到明文的过程

二者合称为密码算法。


密码算法+密钥构成了数据加密和解密


对称加密: 在加密和解密的过程中使用相同密钥的算法,例如:凯撒密码

非对称密码(公钥加密算法):加密和解密使用不同密钥的算法,例如:RSA


Python来实现凯撒密码

image.png


ord() :将字符转换为了对应的 ASCII 值

chr(): 将对应的值转换为字符

取模运算: 将一个数整除另一个数得到的余数,余数即模运算的值


# -*- coding: utf-8 -*-
# @Date    : 2018-10-12
# @Author  : Peng Shiyu
class CaesarCipher(object):
    """
    凯撒加密解密
    """
    def __crypt(self, char, key):
        """
        对单个字母加密,偏移
        @param char: {str} 单个字符
        @param key: {num} 偏移量
        @return: {str} 加密后的字符
        """
        if not char.isalpha():
            return char
        else:
            base = "A" if char.isupper() else "a"
            return chr((ord(char) - ord(base) + key) % 26 + ord(base))
    def encrypt(self, char, key):
        """
        对字符加密
        """
        return self.__crypt(char, key)
    def decrypt(self, char, key):
        """
        对字符解密
        """
        return self.__crypt(char, -key)
    def __crypt_text(self, func, text, key):
        """
       对文本加密
       @param char: {str} 文本
       @param key: {num} 偏移量
       @return: {str} 加密后的文本
       """
        lines = []
        for line in text.split("\n"):
            words = []
            for word in line.split(" "):
                chars = []
                for char in word:
                    chars.append(func(char, key))
                words.append("".join(chars))
            lines.append(" ".join(words))
        return "\n".join(lines)
    def encrypt_text(self, text, key):
        """
        对文本加密
        """
        return self.__crypt_text(self.encrypt, text, key)
    def decrypt_text(self, text, key):
        """
        对文本解密
        """
        return self.__crypt_text(self.decrypt, text, key)
if __name__ == '__main__':
    plain = """
    you know? I love you!
    """
    key = 3
    cipher = CaesarCipher()
    # 加密
    print(cipher.encrypt_text(plain, key))
    # brx nqrz? L oryh brx!
    # 解密
    print(cipher.decrypt_text("brx nqrz? L oryh brx!", key))
    # you know? I love you!


相关文章
|
21天前
|
安全 小程序 数据安全/隐私保护
aes加密算法python版本
aes加密算法python版本
21 0
|
21小时前
|
Python
Python编程中的装饰器应用探索
【2月更文挑战第6天】本文将深入探讨Python编程中装饰器的应用,介绍装饰器的定义、作用以及实际应用场景,并结合示例代码详细阐释装饰器在函数、类等方面的灵活运用,帮助读者更好地理解和使用装饰器提升代码的可复用性和可维护性。
|
1天前
|
调度 Python
什么是Python中的协程(Coroutine)?如何使用`async`和`await`进行协程编程?
什么是Python中的协程(Coroutine)?如何使用`async`和`await`进行协程编程?
4 0
|
2天前
|
安全 调度 Python
什么是Python中的事件驱动编程?如何使用`asyncio`模块实现异步事件处理?
【2月更文挑战第4天】【2月更文挑战第9篇】什么是Python中的事件驱动编程?如何使用`asyncio`模块实现异步事件处理?
|
3天前
|
测试技术 Python
Python编程中的装饰器应用探究
【2月更文挑战第4天】在Python编程中,装饰器是一种强大的工具,它可以在不修改原有函数代码的情况下,为函数添加额外的功能。本文将深入探讨装饰器的概念、用法以及实际应用场景,帮助读者更好地理解和运用装饰器提升代码的可维护性和可复用性。
|
3天前
|
程序员 Python
Python编程中的陷阱与救赎
【2月更文挑战第4天】在Python编程的过程中,我们常常会遇到各种各样的错误。这些错误可能是由于语法问题、逻辑错误或者是运行时错误所导致的。本文将介绍一些常见的Python编程错误,以及如何通过调试和测试来解决这些问题。
|
4天前
|
Python
Python猜字游戏是一种常见的编程练习
Python猜字游戏是一种常见的编程练习
8 2
|
5天前
|
人工智能 自然语言处理 搜索推荐
迈向AI时代:掌握Python编程与ChatGPT的结合
ChatGPT是一种基于自然语言处理技术的模型,它可以理解人类的语言并生成相应的回复。而Python编程则是一种通过编写代码来实现特定功能的技能。将ChatGPT与Python编程相结合,我们可以利用ChatGPT来帮助我们理解编程概念、编写代码以及解决编程问题。
12 0
|
5天前
|
安全 Python
Python多进程编程中的资源共享与同步问题探讨
Python多进程编程中的资源共享与同步问题探讨
|
5天前
|
Java Python
使用Python的concurrent.futures模块简化多线程与多进程编程
使用Python的concurrent.futures模块简化多线程与多进程编程