前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现字符串与指定密钥循环异或加解密

Python实现字符串与指定密钥循环异或加解密

作者头像
Python小屋屋主
发布2018-04-16 14:47:23
2.5K1
发布2018-04-16 14:47:23
举报
文章被收录于专栏:Python小屋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)

上面的代码运行结果为:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档