序列密码又称流密码,原理是明文流和密钥流按顺序逐位异或运算,从而产出密文流,序列密码属于对合运算。
以下是典型的序列密码RC4的加解密算法实现。其中秘钥流产生算法由RSA和PRGA两个核心子算法组成。
# coding:utf-8
# RC4 python实现代码
# 仅支持128位ASCII码字符文本加解密,要支持任意输入需要更换编码方式
# 秋风木叶 2019-3-27
from FrankTools import ItoB, XOR, StoB, BtoS, swap
def KeyGenerator(K, n):
# RSA(The Key-Scheduling Algorithm)
# 秘钥调度算法
S = [i for i in range(0, 256)]
R = []
for i in range(0,256):
R.append(ord(K[i % len(K)]))
j = 0
for i in range(0,256):
j = (j + S[i] + R[i]) % 256
S[i], S[j] = swap(S[i], S[j])
#print('随机化后的S {}'.format(S))
# PRGA(The Pseudo-Random Generating Algorithm)
# 伪随机子密码生成算法
i = 0
j = 0
K_list = []
while(n):
i = (i+1)%256
j = (j+S[i])%256
S[i],S[j] = swap(S[i],S[j])
t = (S[i]+S[j])%256
K_list.append(S[i])
# K_list存储生成的秘钥
n -= 1
# 秘钥转换为二进制序列
k=''
for i in K_list:
k += ItoB(i)
#print('秘钥序列为:{}'.format(BtoS(k)))
<