下载此文档

流密码与分组密码编程.docx


文档分类:IT计算机 | 页数:约16页 举报非法文档有奖
1/16
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/16 下载此文档
文档列表 文档介绍
流密码与分组密码编程
上机一:流密码与分组密码编程
【上机目的】
熟悉流密码和分组密码加密/解密算法的基本原理,通过编程/开源代码分析分别了解一种标准流密码算法和一种标准分组密码算法的运行原理。
【上机环境】
硬件 Png &);
private:
unsigned char S[256]; //状态向量,共256字节
unsigned char T[256]; //临时向量,共256字节
int keylen; //密钥长度,keylen个字节,取值范围为1-256
vector<char> K; //可变长度密钥
vector<char> k; //密钥流
/*
初始化状态向量S和临时向量T,供keyStream方法调用
*/
void initial() {
for(int i=0;i<256;++i){
S[i]=i;
T[i]=K[i%keylen];
}
}
/*
初始排列状态向量S,供keyStream方法调用
*/
void rangeS() {
int j=0;
for(int i=0;i<256;++i){
j=(j+S[i]+T[i])%256;
//cout<<"j="<<j<<endl;
S[i]=S[i]+S[j];
S[j]=S[i]-S[j];
S[i]=S[i]-S[j];
}
}
/*
生成密钥流
len:明文为len个字节
*/
void keyStream(int len);
};
void RC4::keyStream(int len) {
initial();
rangeS();
int i=0,j=0,t;
while(len--){
i=(i+1)%256;
j=(j+S[i])%256;
S[i]=S[i]+S[j];
S[j]=S[i]-S[j];
S[i]=S[i]-S[j];
t=(S[i]+S[j])%256;
(S[t]);
}
}
void RC4::encryption(const string &plaintext,const string &ks,const string &ciphertext) {
ifstream in;
ofstream out,outks;
(plaintext);
//获取输入流的长度
(0,ios::end);
int lenFile=();
(0, ios::beg);
/生产密钥流
keyStream(lenFile);
(ks);
for(int i=0;i<lenFile;++i){
outks<<(k[i]);
}
();
//明文内容读入bits中
unsigned char *bits=new unsigned char[lenFile];
((char *)bits,lenFile);
();
(ciphertext);
//将明文按字节依次与密钥流异或后输出到密文文件中
for(int i=0;i<lenFile;++i){
out<<(unsigned char)(bits[i]^k[i]);
}
<span style="white-space:pre"> </span>();
delete []bits;
}
解密类: 
/*
解密类
*/
class RC4_decryption{
public:
/*
构造函数,参数为密钥流文件和密文文件
*/
RC4_decryption(const string ks,const string ct):keystream(ks),ciphertext(ct) {}
/*
解密方法,参数为解密文件名

void decryption(const string &);
private:
string ciphertext,keystream;
};

流密码与分组密码编程 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数16
  • 收藏数0 收藏
  • 顶次数0
  • 上传人儒林
  • 文件大小4.08 MB
  • 时间2022-02-18