• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: C/C++
  • 标签: RC4  

资源简介

自己根据密码课本上写的,供大家参考,要是哪里写得不对的话麻烦大家指正,O(∩_∩)O谢谢

资源截图

代码片段和文件信息

#include
#include
#include
using namespace std;
unsigned char k[8]temptable[30000]plaintable[30000]nowtable[30000]sonkey[30000] ; int  plainlengthklength;
int ktable[256]stable[256];
class rc4
{
  public:
  static unsigned char xor(unsigned char aunsigned char b);    //加解密的时候进行异或运算,注意要转换成unsigned char类型,否则异或会出现大于255的现象
  static void swap( int *a int *b);   //两个数进行交换操作
  static void KSA();      //密钥调度
  static void PRGA();     //伪随机生成
  void cryption();         //加密
  void decryption();      //解密
  void dtoh(unsigned char a);   //转换成16进制输出
  rc4() {};   //构造函数

};

unsigned char rc4::xor(unsigned char aunsigned char b)
{
return a^b;
}


void rc4::swap( int *a int *b)
{
    int temp;
temp=*a;
*a=*b;
*b=temp;
}

void rc4::KSA()
{
int ij=0;
for(i=0;i<256;i++)
{
j=(j+stable[i]+( int)ktable[i])%256;
swap(&stable[i]&stable[j]);
}
cout< cout<<“************************“< cout<<“Output Key“<    for(i=0;i<256;i++)
cout< cout<
}

void rc4::PRGA()
{
    int m=0i=0j=0tl;l=plainlength;
while(l--)     //密钥长度要和明文长度一致
{
i=(i+1)%256;
j=(j+stable[i])%256;
swap(&stable[i]&stable[j]);
t=(stable[j]+stable[i])%256;
sonkey[m++]=stable[t];               //将子密钥存放在sonkey数组中
}

}

void rc4::cryption()
{
KSA();
PRGA();

评论

共有 条评论