您当前的位置:首页 > 计算机 > 编程开发 > Python

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

时间:09-09来源:作者:点击数:

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

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)

上面的代码运行结果为:

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门