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_xiaowu)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-11-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小灰灰

java之通过反射生成并初始化对象

java之通过反射生成并初始化对象 在博文 《java之的读取文件大全》 中读取csv文件后,需要自己将csv文件的对象转为自己的DO对象,那么有没有办法我...

1.5K60
来自专栏Java与Android技术栈

封装一个RxCondition,告别if else和switch case

通常而言,Rx如果遇到if条件语句、switch case语句时需要先选择分支条件,然后再进行链式调用。RxCondition产生的目的就是为了在这些情况下也能...

7710
来自专栏BaronTalk

RxJava系列五(组合操作符)

这一章我们接着介绍组合操作符,这类operators可以同时处理多个Observable来创建我们所需要的Observable。组合操作符主要包含: Merge...

44580
来自专栏数据结构与算法

2570 绝对素数

2570 绝对素数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个自然数...

36870
来自专栏张泽旭的专栏

古典密码加密解密之多表代换

多表代换密码首先将明文M 分为由n 个字母组成的分组, , … ,对每个分组的加密为 ≡ + ( ), = , , … 其中,(A,B)是密钥,A 是 ...

21440
来自专栏增长技术

位运算

12420
来自专栏公众号_薛勤的博客

Java实现一个简单的加密解密方法

加密方法 String cipherte=Enande.encrypt(content, pass);

20820
来自专栏jeremy的技术点滴

py3_cookbook_notes_01

35880
来自专栏Play & Scala 技术分享

Java生成十六进制的MD5加密字符串

62030
来自专栏chenssy

【死磕 Spring】—– IOC 之构造函数实例化 bean

createBeanInstance() 用于实例化 bean,它会根据不同情况选择不同的实例化策略来完成 bean 的初始化,主要包括:

17540

扫码关注云+社区

领取腾讯云代金券