需要一个Rc4可以字符串密钥加解密的列子,不要第三方头文件,用C++自带的头文件编写,可以加解密的例子(字符串,或者,char*)
用C++加密解密(RC4对称密码算法)
https://blog.csdn.net/wangz76/article/details/120536190
#include<bits/stdc++.h>
using namespace std;
const int N=256;
char m[N]= {"this is a test"}; //明文与密文
int len,s[N],t[N],c[N],key[N];
//本次试验n=3,故随机选取密钥5 6 7对t数组依次填充
void init()//初始化
{
int j=0;
for(int i=0; i<N; i++) s[i]=i; //对s-box线性填充
for(int i=0; i<N; i++) //依次填充辅助数组
{
if(i%3==0) t[i]=5;
else if(i%3==1) t[i]=6;
else t[i]=7;
j=(j+s[i]+t[i])%N;
swap(s[j],s[i]);
}
}
void RC4_add()
{
int i=0,j=0;
for(int k=0; k<len; k++)
{
i=(i+1)%N;
j=(j+s[i])%N;
// swap(s[i],s[j]);
int tmp=(s[i]+s[j])%N;
m[k]^=s[tmp];
printf("%c",m[k]);
}
}
int main()
{
len=strlen(m);
init();
printf("明文:%s\n",m);
printf("加密:");
RC4_add();
printf("\n解密: ");
RC4_add();
}
#include <iostream>
#include<stdio.h>
#define MAX_CHAR_LEN 255
void producekeystream(int textlength,char key[],int keylength,char keystream[])
{
int S[256];
int i,j=0,k;
char tmp;
for(i=0;i<256;i++)
S[i]=i;
for(i=0;i<256;i++)
{
j=(j+S[i]+key[i%keylength])%256;
tmp=S[i];
S[i]=S[j];
S[j]=tmp;
}
i=j=k=0;
while(k<textlength)
{
i=(i+1)%256;
j=(j+S[i])%256;
tmp=S[i];
S[i]=S[j];
S[j]=tmp;
keystream[k++]=S[(S[i]+S[j])%256];
}
}
void rc4encdec(int textlength,char plaintext[],char keystream[],char ciphertext[])
{
int i;
for(i=0;i<textlength;i++)
{
ciphertext[i]=keystream[i]^plaintext[i];
}
}
int main()
{
char plaintext[MAX_CHAR_LEN]; //存放源明文
char chktext[MAX_CHAR_LEN]; //存放解密后的明文
char key[32]; //存放用户输入密钥
char keystream[MAX_CHAR_LEN]; //存放生成的密钥流
char ciphertext[MAX_CHAR_LEN];//存放加密后的密文
char c;
int i=0,textlength,keylength;
gets(plaintext);
while(plaintext[i]!='\0') i++;
textlength=i;
printf("password:");
for(i=0;(c=getchar())!='\n';i++)
key[i]=c;
key[i]='\0';
keylength=i;
producekeystream(textlength,key,keylength,keystream);//使用key生成一个keystream
rc4encdec(textlength,plaintext,keystream,ciphertext);//使用密钥流和明文生成密文
puts(ciphertext);
rc4encdec(textlength,ciphertext,keystream,chktext);
puts(chktext);
return 0;
}