最近在做一个项目,需要使多个参与方同时知道字符串的值,同时又使这个值不被特殊参与方知道,要达到这种需求很自然的就可以想到使用加密方法。但传统的加密算法过于复杂,不适于快速计算,于是产生了一种利用流密码原理,使用伪随机数与字符串异或的方式来实现加密。
而由于异或运算的可逆性,可以很轻松地使各个共享参与方都知道该字符串(各个共享参与方都使用同样的伪随机数生成器和种子生成相同的伪随机数)。
以下是代码:
def rand_str(rand_seed):
random.seed(rand_seed)
sr = random.randint(0, 0XFFFFFFFF)
return str(sr)
# s 为待加密字符串,k 为伪随机数密钥
def str_xor(s: str, k: str):
k = (k * (len(s) // len(k) + 1))[0:len(s)]
return ''.join(chr(ord(a) ^ ord(b)) for a, b in zip(s, k))
def main():
rand_seed = get_seed() # 获取共同的伪随机数种子
s1 = 'Hello World.'
key = rand_str(rand_seed)
c = str_xor(s1, key) # 字符串异或
print(c)
s2 = str_xor(c, key)
print(s2) # 'Hello World.'
if __name__ == '__main__':
main()