RC4加密算法

RC4算法原理

  1. 对称加密算法、流密码加密算法(DES是分组加密算法)
  2. 密钥长度不固定(1-256byte),面向字节,以一个超大的S表为基础对表进行非线性变换,得到密钥流
  3. 其中明文 xor 密钥 = 密文 , 密文 xor 密钥 = 明文

加密原理

在这里插入图片描述

1.填充S表

按升序填充S表内容,S[0] = 0 、S[1] = 1、、、、、S[255] = 255

2.填充K表(种子密钥)

将输入的种子密钥填充至大小为256byte的K表,一般不超过256byte,少于则循环补充例如密钥为123,则K表的值填充为123123123123…1(len = 256)

3.将K表与S表进行初始置换

置换算法:

j = 0;
for(int i = 0;i < 256;i++){
    
    
  j = (j + S[i] + K[i]) mod 256;
  swap(S[i],S[j]); //交换函数S[i]与S[j]进行交换数据
}

例子:假设S表长度为7,K表长度为7,那么算法为:

s = [0,1,2,3,4,5,6] #S表初始化
k = [3,4,5,3,4,5,3] #输入的密钥为345

j =0
for i in range(7) :  #初始化S表算法
  j = (j + s[i] + k[i]) % 7
  m = s[i]
  s[i] = s[j]
  s[j] = m

flag = ''
#交换后的值
for i in s:
 flag += str(i)
 flag += ','

print(flag) #输出结果3,0,1,4,5,2,6

密钥流生成

生成算法:

int i , j =0;
for(int r = 0 ;r < data; r++){
    
     //data表示明文长度,字节为单位
  i = (i+1) mod 256;
  j = (j+S[i]) mod 256;
  swap(S[i],S[j]);
  t = (S[i],S[j]) mod 256;
  k[r] = S[t]; //这里就表示了明文多长,密钥就有多长
}

例子:假设S表长度为7,K表长度为7,写密钥算法:

s = [3,0,1,4,5,2,6] #经过上面S表初始化的值
k = [3,4,5,3,4,5,3] #输入的密钥为345

i = 0
j =0
for r in range(7) :  #初始化S表算法
  i = (i+1) % 7
  j = (j + s[i]) % 7
  m = s[i]
  s[i] = s[j]
  s[j] = m
  t = (s[i] + s[j]) % 7
  k[r] = s[t];

flag = ''
for r in k:
 flag += str(r)
 flag += ','

print(flag); #生成的密钥为:4,5,6,0,2,0,3

猜你喜欢

转载自blog.csdn.net/csdn546229768/article/details/128795485