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

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

凯撒密码

原理:

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

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

例如:

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

20181012160212870.png

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

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

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

二者合称为密码算法。

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

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

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

Python来实现凯撒密码

20181012160443256.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!

详细参考:

Hacking- Python之禅

相关文章
|
安全 测试技术 数据库
Python编程--sys模块及OS模块简单用例
Python编程--sys模块及OS模块简单用例
189 1
|
JSON 数据格式 Python
Python编程:利用JSON模块编程验证用户
Python编程:利用JSON模块编程验证用户
117 1
|
数据处理 Python
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
223 1
|
人工智能 安全 Java
Python 多线程编程实战:threading 模块的最佳实践
Python 多线程编程实战:threading 模块的最佳实践
464 5
|
安全 调度 Python
什么是Python中的事件驱动编程?如何使用`asyncio`模块实现异步事件处理?
【2月更文挑战第4天】【2月更文挑战第9篇】什么是Python中的事件驱动编程?如何使用`asyncio`模块实现异步事件处理?
381 0
|
缓存 分布式计算 自然语言处理
Python语言的函数编程模块
Python语言的函数编程模块
|
并行计算 程序员 API
Python多进程编程:利用multiprocessing模块实现并行计算
Python多进程编程:利用multiprocessing模块实现并行计算
1231 0
|
前端开发 安全 Unix
Python编程手册系列 - 日历、日期、时间相关内建模块详解
Python编程手册系列 - 日历、日期、时间相关内建模块详解
226 0
|
开发者 Python
< Python全景系列-7 > 提升Python编程效率:模块与包全面解读
< Python全景系列-7 > 提升Python编程效率:模块与包全面解读
196 0
|
SQL 关系型数据库 MySQL
Python编程:MySQLdb模块对数据库的基本增删改查操作
Python编程:MySQLdb模块对数据库的基本增删改查操作
198 1