rc4算法该怎样写一个完整的程序代码?用的是cc++都行。

Python018

rc4算法该怎样写一个完整的程序代码?用的是cc++都行。,第1张

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef unsigned long ULONG

void rc4_init(unsigned char *s, unsigned char *data,unsigned Len) { //初始化函数

int i,j

unsigned char k[256] = {0},tmp

for(i = 0i <256i++) {

s[i] = i

k[i] = data[i%Len]

}

for(i = 0i <256i++) {

j = (j + s[i] + k[i])%Len

tmp = s[i]

s[i] = s[j]//交换s[i]和s[j]

s[j] = tmp

}

}

void rc4_crypt(unsigned char *s, unsigned char *Data, unsigned long Len) { //加解密

int i = 0, j = 0, t = 0

unsigned long k = 0

unsigned char tmp

for(k = 0k <Lenk++) {

i = (i + 1)%256

j = (j + s[i])%256

tmp = s[i]

s[i] = s[j]//交换s[x]和s[y]

s[j] = tmp

t = (s[i] + s[j])%256

Data[k] ^= s[t]

}

}

int main() {

unsigned char s[256] = {0},st[256] = {0}//S-box

char key[256] = "just for test"

char pData[512] = "待加密数据Data"

ULONG len = strlen(pData)

printf("pData = %s\n",pData)

printf("key = %s, length = %d\n\n",key,strlen(key))

rc4_init(s,(unsigned char *)key,strlen(key))//初始化

printf("完成对S[i]的初始化,如下:\n\n")

for(int i = 0i <256i++) {

printf("%-3d ",s[i])

}

printf("\n\n")

for(i = 0i <256i++) { //用st[i]暂时保留经过初始化的s[i],很重要的!!!

st[i] = s[i]

}

printf("已经初始化,现在加密:\n\n")

rc4_crypt(s,(unsigned char *)pData,len)//加密

printf("pData = %s\n\n",pData)

printf("已经加密,现在解密:\n\n")

rc4_init(s,(unsigned char *)key,strlen(key)) //初始化密钥

rc4_crypt(st,(unsigned char *)pData,len)//解密

printf("pData = %s\n\n",pData)

return 0

}

void re_RC4(unsigned char *S,char *key)

{

unsigned char T[255]={0} //问题在这,你的re_T第一个参数是unsigned char *,你传递的参数是//char,所以不对

re_S(S)

re_T(T,key)

re_Sbox(S,T)

}