ax_hacker 2015-11-19 08:03
浏览 1292

RC4编程为何加密结果是乱码,而且求逆解码的结果与明文不同,多谢~

#include
#include
using namespace std;

void main()
{
char k[256];
int s[256],t[256];

cout<<"please input key"<<endl;
cin>>k;
cout<<endl;

for(int i=0;i<256;i++)
{
    s[i]=i;
    t[i]=k[i%strlen(k)];                            //将输入的密钥扩展为256位
}

int j=0;
for(i=0;i<256;i++)
{
    int temp;
    j=(j+s[i]+t[i])%256;

    temp=s[i];
    s[i]=s[j];
    s[j]=temp;                                              //s-box的变换,打乱原有的顺序

}

cout<<"please input plaintext"<<endl;

char plaintext[256],ciphertext[256];

int static key[256];
cin>>plaintext;




for(i=0;i<256;i++)
{
    cout<<s[i]<<" ";
}
cout<<endl;



cout<<strlen(plaintext);


cout<<endl;
j=0;
int m,n,q;
m=n=0;
for(i=0;i<strlen(plaintext);i++)              //循环产生和明文一样长的key密钥流
{
    int temp;
    m=(m+1)%256;
    n=(n+s[m])%256;

    temp=s[m];
    s[m]=s[n];
    s[n]=temp;

    int q;

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


    key[i]=s[q]; 
    cout<<plaintext[i]<<"(";
    ciphertext[i]=plaintext[i]^key[i];

    cout<<ciphertext[i];


}

cout<<endl;

cout<<"/n密钥流是:";
for(i=0;i<strlen(plaintext);i++)
{   cout<<key[i]<<" "<<plaintext[i];
    cout<<endl;
}


cout<<"密文是:";
for(i=0;i<strlen(plaintext);i++)
{
    cout<<int(ciphertext[i]);
}

cout<<endl;
cout<<"解密后明文为:"<<endl;
int a[256];
for(i=0;i<strlen(plaintext);i++)
{
a[i]=ciphertext[i]^key[i];
cout<<a[i];
}

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 c程序不知道为什么得不到结果
    • ¥40 复杂的限制性的商函数处理
    • ¥15 程序不包含适用于入口点的静态Main方法
    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置