首页 > 编程语言 >Python学习——例题详解1、字符串简单加密和解密

Python学习——例题详解1、字符串简单加密和解密

时间:2024-03-27 20:32:41浏览次数:22  
标签:加密 迭代 Python 解密 next keys 循环 key 例题

1、加密原理

       基于按位异或(^),对字符串进行简单的加密算法原理:

ord('A')^ord('P') #加密,运算结果:17
chr(17^ord('p'))  #解密,运算结果:‘A’
2、例题

        给定字符串text作为明文(要加密的原文,同上述A)和key作为密钥(同上述P),使用按位异或循环处理text的每一个字符达到加密效果,结果就是加密后的密文(同上述加密运算结果17);解密需将密文转为明文。

from itertools import cycle
def crypt(text,key):
    result = []  #定义一个空的列表用来存放密语
    keys = cycle(key) #迭代器,用于迭代密钥的每一个字符
    for ch in text:
        result.append(chr(ord(ch)^ord(next(keys))))
        #逐字加密并将结果添加到result列表中
    return ''.join(result) #return在循环体外

#test
if __name__ == '__main__':

    plain = 'The quick brown fox jumps over the lazy dog' #明文
    key = 'Python_1' #密钥
    print('加密前明文:{}'.format(plain))
    encrypted = crypt(plain,key) #加密 
    print('加密后的密文:{}'.format(encrypted))
    decrypted = crypt(encrypted,key) #解密
    print('解密后的明文:{}'.format(decrypted))
3、详解

(1)itertools库,提供高效循环和迭代的工具,库中包含了许多用于迭代的函数。此例使用cycle()函数用来创建无限循环的可迭代对象:keys = cycle(key),进而在循环语句中next(keys)可以循环反复地取key地每个字符。例如:key = ‘zxcvb’,那么第一次循环next(keys)=‘z’,第二次循环next(keys)=‘x’,第三次循环next(keys)=‘c’,第四次循环next(keys)=‘v’,第五次循环next(keys)=‘b’,第六次循环next(keys)=‘z’……

(2)return语句应在循环体外,否则在第一次循环后生成result后直接执行return语句便会提前结束函数的执行;若要在循环中返回多个值,考虑yield语句生成一个生成器,多次返回值并保持函数的执行状态,直到完全被迭代。

标签:加密,迭代,Python,解密,next,keys,循环,key,例题
From: https://blog.csdn.net/fdhjflbj/article/details/137042304

相关文章

  • Python学习——访问命令行参数、标准输入输出
    一、sys模块    通过sys.argv()函数访问命令行参数,sys.argv()生成的是一个列表,argv[0]访问脚本,argv[1]访问第一个参数,argv[2]访问第二个参数。例1、通过调用命令行参数n,生成n个随机数。#访问命令行importsys,randomn=int(sys.argv[1])#调用命令行第一个参数,即n......
  • python-列表、元组、字符串、集合、字典等用法
    目录1.列表(list)1.1  列表的定义语法1.2  列表的下标索引1.3  列表的常用操作1.4  列表的循环遍历示例2.元组(tuple)3.字符串4.数据容器(序列)的切片4.2序列切片课后练习5.集合(set)5.1  集合的操作方法6.字典(dict)7.容器排序,排序之后会变成列表对象1.......
  • 【华为OD机试真题】C卷-模拟目录管理功能(Python)
    一、题目描述【华为OD机试真题】C卷-模拟目录管理功能(Python)题目描述:实现一个模拟目录管理功能的软件,输入一个命令序列,输出最后一条命令运行结果。支持命令:1、创建目录命令:mkdir目录名称,如mkdirabc为在当前目录创建abc目录,如果已存在同名目录则不执行任何操作。此命......
  • 手把手教你用python一键抢12306火车票(附代码)
    哈喽,哈喽~,一年一度的抢火车票大战正式拉开序幕…然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备抢票的时候,你会发现一票难求!想回趟家真难!那么作为程序猿的你,当然要用程序猿的方式来抢票!下面分享用python来抢票!网站提供各种免费资源!城市cookie可根据具体需求自行添加!链......
  • Python 使用 Cloudflare API 自动修改 DNS 记录教程
    本教程介绍了如何使用Python和CloudflareAPI自动修改DNS记录,包括API密钥的获取、API请求的构建以及DNS记录的更新。准备工作1、注册Cloudflare账号你需要在Cloudflare官网(https://www.cloudflare.com/)注册一个账号。2、添加需要修改DNS记录的域名登录Cloudflare......
  • python笔记(3)基本数据类型简介
    目录python3的六个标准数据类型Numbers(数字) 数值运算String(字符串)List(列表)Tuple(元组)Sets(集合)set()函数有两用方式使用set运算Dictionaries(字典)python3的六个标准数据类型Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionaries(字典)Set(集合)......
  • Python学习day3
    知识:#继承,创建有继承的类#父类、子类#class子类(父类):#调用时找父类的构造函数,如果子类自己有某函数则调用子类的,否则调用父类的#在子类有构造函数的时候调用父类,可以用super().__init__的方法调用父类函数代码:#举例人力系统classstaff:def__init__(self,na......
  • Python篇之网络编程,实现简单的服务端和客户端的内容传输
    本小节内容:实现简单的信息交流文章目录一、Socket介绍二、客户端与服务端三、在python中实现网络通信1.服务端2.客户端3.连接测试一、Socket介绍socket(简称套接字)模块是其内置的标准库之一,它实现了BSDsocketsAPI,允许开发者在Python程序中进行网络通......
  • 【Python系列】Python 中 YAML 文件与字典合并的实用技巧
    ......
  • 【Python】Python基本数据类型(超详细)
    前言在上一篇文章我们简单介绍了一下Python,本章我们就开始正式学习Python,在此之前,考虑到Python环境有的小伙伴可能没有,所有我开了一个QQ群,里面有代码编辑器(PyCharm)的安装与破解使用,如果有大佬需要的话可以加群自行安装,这个群创建的目的也是方便各位讨论技术,QQ群号:455341......