泊头那家做网站,wordpress登录打不开,杭州保洁公司保洁服务,购物网站开发的背景1、密钥流#xff1a;RC4算法的关键是根据明文和密钥生成相应的密钥流#xff0c;密钥流的长度和明文的长度是对应的#xff0c;也就是说明文的长度是500字节#xff0c;那么密钥流也是500字节。当然#xff0c;加密生成的密文也是500字节#xff0c;因为密文第i字节明文… 1、密钥流RC4算法的关键是根据明文和密钥生成相应的密钥流密钥流的长度和明文的长度是对应的也就是说明文的长度是500字节那么密钥流也是500字节。当然加密生成的密文也是500字节因为密文第i字节明文第i字节^密钥流第i字节 2、状态向量S长度为256S[0],S[1].....S[255]。每个单元都是一个字节算法运行的任何时候S都包括0-255的8比特数的排列组合只不过值的位置发生了变换 3、临时向量T长度也为256每个单元也是一个字节。如果密钥的长度是256字节就直接把密钥的值赋给T否则轮转地将密钥的每个字节赋给T 4、密钥K长度为1-256字节注意密钥的长度 keylen 与明文长度、密钥流的长度没有必然关系通常密钥的长度取为16字节128比特。 5、算法实现 //rc4.h
templateclass T inline void
swap(T i, T j)
{ T tmp i; i j; j tmp;
}
class RC4
{
public: void SetKey(const char* key, int keylen); void Transform(char* output, const char* input, int len);
private: unsigned char key_[256];
};
/
//rc4.cc
#include rc4.h
void RC4::SetKey(const char* key, int keylen)
{ for (int i 0; i 256; i) { key_[i] i; } int j 0; for (int i 0; i 256; i) { j (j key_[i] key[i%keylen]) % 256; swap(key_[i], key_[j]); }
}
void RC4::Transform(char* output, const char* input, int len)
{ int i 0, j 0; for (int k 0; k len; k) { i (i 1) % 256; j (j key_[i]) % 256; swap(key_[i], key_[j]); unsigned char subkey key_[(key_[i] key_[j]) % 256]; output[k] subkey ^ input[k]; }
}
/
//main.cc
#include stdio.h
#include string.h
#include stdlib.h
#include rc4.h
int main()
{ char input[256] Times teaches all things to him who lives forever but I have not the luxury of eternity.; char output[256] ; printf(before encrypt:%s/n, input); const int keylen 16; char key[keylen] ; for (int i 0; i keylen; i) { key[i] rand() % 256; } RC4 rc4encrypt, rc4decrypt; rc4encrypt.SetKey(key, keylen); rc4decrypt.SetKey(key, keylen); rc4encrypt.Transform(output, input, strlen(input)); printf(after encrypt: %s/n, output); rc4decrypt.Transform(output, output, strlen(input)); printf(after decrypt: %s/n, output); return 0;
}