Python实现字符串与指定密钥循环异或加解密
异或运算在很多密码学算法中都有不同程度的应用,其运算特定在于一个数和另一个数连续异或两次仍得到原来的数。在实际使用中,因为要加密的信息和所使用的密钥在大多数情况下是不等长的,所以经常需要循环使用密钥。
def crypt1(source, key):
'''source是要加密或解密的字符串,key是密钥字符串'''
#result用来存放最终结果
#index表示当前使用的密钥字符索引
result = ''
index = 0
#遍历字符串中的每个字符
for ch in source:
#循环使用密钥字符串中的每个字符
#如果已到最后一个字符,再从0重新开始
if index == len(key):
index = 0
#异或运算
result += chr(ord(ch) ^ ord(key[index]))
index = index + 1
return result
#也可以写成下面更简洁的形式
def crypt2(source, key):
from itertools import cycle
result = ''
temp = cycle(key)
for ch in source:
result += chr(ord(ch) ^ ord(next(temp)))
return result
source = '中国,Shandong 2016'
key = 'Dong Fuguo'
#测试
for func in (crypt1, crypt2):
print('function name:', func.__name__)
print('plain text:', source)
c = func(source, key)
print('crypted text:', c)
m = func(c, key)
print('decrypted text:', m)
print('='*30)
上面的代码运行结果为:
Python实现字符串与指定密钥循环异或加解密相关推荐
- python删除指定位置的字符串_python去除区域 python删除字符串中指定位置字符
python删除字符串中指定位置字符 原程序是这样的: ser = serial.Serial("/dev/ttyAMA0", 9600) def main字符串的话,你可以把他当 ...
- Java/IOS通用异或加解密字符串
1.Java的异或加解密算法 在使用异或加解密时,加密和解密的密钥必须保持相同,否则解密时无法恢复为原来的内容. public class XOREncryptAndDecrypt {//密钥 加解密 ...
- c语言实现的异或加解密,C语言实现视频异或加/解密
C语言实现异或加/解密的原理 异或原理很简单,异或一次为加密,再异或一次就成了解密了.看下代码 /** * 加密/解密文件 * *@param sourcefile 要加密/解密的文件名 *@para ...
- python把字符串按照指定长度分割_python如何将字符串等长分割
python将字符串等长分割的方法:1.两个一组分割,代码为[b=re.findall(r'.{2}',aa) ]:2.按照固定长度分割字符串三个字符一组,代码为[re.findall(r'.{3}' ...
- [转载] python 去除字符串中指定字符
参考链接: Python字符串 replace python中的strip()可以去除头尾指定字符 ss = '我的电话是18827038663,也是微信号,\n 请加入,谢谢\n\n\n' prin ...
- Python删除字符串中指定字符
删除特定位置字符 使用.pop()方法,先将字符串转换为列表,再把列表转换成字符串. string1 = '雪雪最大' # 定义一个字符串 list_str = list(string1) # 将字符 ...
- Python之字符串删除指定字符
方法一:pop()删除指定位置的字符 s1 = 'hello' lst_s1 = list(s1) # 将字符串转为列表 lst_s1.pop(1) # 删除下标为1的字符 print(''.join ...
- python删除字符串中指定字符_python如何去除字符串中不想要的字符
问题: 过滤用户输入中前后多余的空白字符 ' ++++abc123--- ' 过滤某windows下编辑文本中的'\r': 'hello world \r\n' 去掉文本中unicode组合字符,音调 ...
- python删除字符串中指定_python删除字符串中指定字符
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
最新文章
- 服务器比普通电脑响应速度快吗,云服务器比普通的快吗
- 只需2.5W功耗,就能达到5TOPS算力!地平线新一代AIoT芯片「旭日3」发布
- ASPJPEG图片处理组件安装和使用问题
- php的echo 和 return的区别
- Action 参数的取值及其含义
- 知物由学 | 未来安全隐患:AI的软肋——故意欺骗神经网络
- 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList【转】
- 擎天出口退税软件_新版申报系统退税申报注意事项
- Spring Boot项目在GitHub上初始化及控管步骤
- 优化Nginx的处理性能
- 第一百天 how can i 坚持
- 【JAVA笔记——道】Hadoop设计模式--抽象类
- Julia: PostgreSQL数据库.......
- 【C语言】动态内存的分配
- 在MacOS系统下DMG文件显示压缩包无法双击安装解决办法
- 如何批量修改照片后缀名
- 吐血整理APP被苹果APPStore拒绝的各种原因
- 【报告分享】小红书·新消费浪潮下的决策价值之地-小红书(附下载)
- 20220729 证券、金融
- 19-05【icloud】照片备份
热门文章
- python自带的对称算法_一种基于对称算法和专用加载模块的Python程序模块加密方法...
- linux操作系统巡检报告,linux服务器巡检报告
- 登录自动填密码php,192 实现自动登录无限路由器后台管理网页,可以记住自己输入的密码 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
- mysql group by top_Mysql group by top N的问题 | 学步园
- 登录显示未找到服务器,未找到服务器
- mycat分库分表建索引
- oracle 查看隐含参数的脚步
- mysql查询和缓存原理
- android常见布局整理
- qt android 网络编程实例,QT网络编程Tcp下C/S架构的即时通信实例