异或运算在很多密码学算法中都有不同程度的应用,其运算特定在于一个数和另一个数连续异或两次仍得到原来的数。在实际使用中,因为要加密的信息和所使用的密钥在大多数情况下是不等长的,所以经常需要循环使用密钥。

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实现字符串与指定密钥循环异或加解密相关推荐

  1. python删除指定位置的字符串_python去除区域 python删除字符串中指定位置字符

    python删除字符串中指定位置字符 原程序是这样的: ser = serial.Serial("/dev/ttyAMA0", 9600) def main字符串的话,你可以把他当 ...

  2. Java/IOS通用异或加解密字符串

    1.Java的异或加解密算法 在使用异或加解密时,加密和解密的密钥必须保持相同,否则解密时无法恢复为原来的内容. public class XOREncryptAndDecrypt {//密钥 加解密 ...

  3. c语言实现的异或加解密,C语言实现视频异或加/解密

    C语言实现异或加/解密的原理 异或原理很简单,异或一次为加密,再异或一次就成了解密了.看下代码 /** * 加密/解密文件 * *@param sourcefile 要加密/解密的文件名 *@para ...

  4. python把字符串按照指定长度分割_python如何将字符串等长分割

    python将字符串等长分割的方法:1.两个一组分割,代码为[b=re.findall(r'.{2}',aa) ]:2.按照固定长度分割字符串三个字符一组,代码为[re.findall(r'.{3}' ...

  5. [转载] python 去除字符串中指定字符

    参考链接: Python字符串 replace python中的strip()可以去除头尾指定字符 ss = '我的电话是18827038663,也是微信号,\n 请加入,谢谢\n\n\n' prin ...

  6. Python删除字符串中指定字符

    删除特定位置字符 使用.pop()方法,先将字符串转换为列表,再把列表转换成字符串. string1 = '雪雪最大' # 定义一个字符串 list_str = list(string1) # 将字符 ...

  7. Python之字符串删除指定字符

    方法一:pop()删除指定位置的字符 s1 = 'hello' lst_s1 = list(s1) # 将字符串转为列表 lst_s1.pop(1) # 删除下标为1的字符 print(''.join ...

  8. python删除字符串中指定字符_python如何去除字符串中不想要的字符

    问题: 过滤用户输入中前后多余的空白字符 ' ++++abc123--- ' 过滤某windows下编辑文本中的'\r': 'hello world \r\n' 去掉文本中unicode组合字符,音调 ...

  9. python删除字符串中指定_python删除字符串中指定字符

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

最新文章

  1. 服务器比普通电脑响应速度快吗,云服务器比普通的快吗
  2. 只需2.5W功耗,就能达到5TOPS算力!地平线新一代AIoT芯片「旭日3」发布
  3. ASPJPEG图片处理组件安装和使用问题
  4. php的echo 和 return的区别
  5. Action 参数的取值及其含义
  6. 知物由学 | 未来安全隐患:AI的软肋——故意欺骗神经网络
  7. 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList【转】
  8. 擎天出口退税软件_新版申报系统退税申报注意事项
  9. Spring Boot项目在GitHub上初始化及控管步骤
  10. 优化Nginx的处理性能
  11. 第一百天 how can i 坚持
  12. 【JAVA笔记——道】Hadoop设计模式--抽象类
  13. Julia: PostgreSQL数据库.......
  14. 【C语言】动态内存的分配
  15. 在MacOS系统下DMG文件显示压缩包无法双击安装解决办法
  16. 如何批量修改照片后缀名
  17. 吐血整理APP被苹果APPStore拒绝的各种原因
  18. 【报告分享】小红书·新消费浪潮下的决策价值之地-小红书(附下载)
  19. 20220729 证券、金融
  20. 19-05【icloud】照片备份

热门文章

  1. python自带的对称算法_一种基于对称算法和专用加载模块的Python程序模块加密方法...
  2. linux操作系统巡检报告,linux服务器巡检报告
  3. 登录自动填密码php,192 实现自动登录无限路由器后台管理网页,可以记住自己输入的密码 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
  4. mysql group by top_Mysql group by top N的问题 | 学步园
  5. 登录显示未找到服务器,未找到服务器
  6. mycat分库分表建索引
  7. oracle 查看隐含参数的脚步
  8. mysql查询和缓存原理
  9. android常见布局整理
  10. qt android 网络编程实例,QT网络编程Tcp下C/S架构的即时通信实例