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 #MATLAB仿真#车辆换道路径规划
    • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
    • ¥15 数据可视化Python
    • ¥15 要给毕业设计添加扫码登录的功能!!有偿
    • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
    • ¥15 微信公众号自制会员卡没有收款渠道啊
    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘