77范文网 - 专业文章范例文档资料分享平台

RC4流密码算法之C语言实现

来源:网络收集 时间:2020-03-27 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

RC4流密码算法之C语言实现

RC4加密算法

RC4算法的原理很简单,包括初始化算法(KSA)和伪随机子密码生成算法(PRGA)两大部分。假设S-box长度和密钥长度均为为n。先来看看算法的初始化部分(用类C伪代码表示): for (i=0; i

s=i; 在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,并且,该序列是随机的: j=0;

for (i=0; i

j=(j+s+k)%6; swap(s, s[j]); }

i=j=0; 得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。

根据目前的分析结果,没有任何的分析对于密钥长度达到128位的RC4有效,所以,RC4是目前最安全的加密算法之一,大家可以放心使用! while (明文未结束) { ++i%=n; j=(j+s)%n; swap(s, s[j]);

sub_k=s((s+s[j])%n); }

位长可以自己随意设置,将256设置为你希望的即可 我的C语言源码: 平台:windowsXP,VC++6.0

有什么大家可以讨论的地方请留言或发邮件至我邮箱: #include #include #include

void swap(unsigned char *s1,unsigned char *s2) {

char temp; temp=*s1; *s1=*s2; *s2=temp; }

void re_S(unsigned char *S) {

unsigned int i; for(i=0;i<256;i++) S[i]=i; }

void re_T(unsigned char *T,char *key) {

int i;

int keylen;

keylen=strlen(key); for(i=0;i<256;i++) T[i]=key[i%keylen]; }

void re_Sbox(unsigned char *S,unsigned char *T) {

int i; int j=0;

for(i=0;i<256;i++) {

j=(j+S[i]+T[i])%6;

swap(&S[i],&S[j]); } }

void re_RC4(unsigned char *S,char *key) {

char T[255]={0}; re_S(S);

re_T(T,key); re_Sbox(S,T); }

void RC4(FILE *readfile,FILE *writefile,char *key) {

unsigned char S[255]={0}; unsigned char readbuf[1]; int i,j,t; re_RC4(S,key); i=j=0;

while(fread(readbuf,1,1,readfile)) {

i = (i + 1) % 256; j = (j + S[i]) % 256; swap(&S[i],&S[j]);

t = (S[i] + (S[j] % 256)) % 256; readbuf[0]=readbuf[0]^S[t]; fwrite(readbuf,1,1,writefile); memset(readbuf,0,1); }

printf(\加密|解密成功!!!\\n\}

int main(int argc,char *argv[]) {

char *Filename1,*Filename2; char *key;

FILE *file1,*file2; Filename1 = argv[1]; Filename2 = argv[2]; key=argv[3]; if ( argc == 4) {

printf(\正在加密中*******************\\n\} else {

printf(\输入格式: \\n\

printf(\文件名|加密或解密文件名|存放文件名|密钥 \\n\ return -1; }

if ((file1= fopen(Filename1,\fopen(Filename2,\{

printf(\ return -1; }

RC4(file1,file2,key); fclose(file1); fclose(file2); return 0; }

加密解密算法 RC5- - #include #include \#include

static const w=32; static const r=12; static const b=16;

static const t=26;//2*r+2=12*2+2 static const c=4; //r*8/b = 16*8/32

typedef unsigned long int FOURBYTEINT; typedef unsigned char BYTE; /**

* 循环左移和右移函数 * x : 被循环的数

* y : 将要循环的位数 */

#define ROTL(x,y) (((x)<<(y&(w-1))) | ((x)>>(w-(y&(w-1))))) #define ROTR(x,y) (((x)>>(y&(w-1))) | ((x)<<(w-(y&(w-1)))))

/** 产生子密钥的函数 */

void generateChildKey(unsigned char*,FOURBYTEINT*);

/** 产生初试密钥的函数 */

void InitialKey(unsigned char* KeyK,int b){

for(int i=0;i

int intiSeed=3; KeyK[0]=intiSeed; for(i=1;i

KeyK[i] = (BYTE) ( ((int)(pow(3,i)))%(255-i) ); //KeyK[i] = KeyK[i-1]*intiSeed % 256; } }

/** 取最近奇数的函数 */

int Odd(double fl){

int floorOffl = (int)floor(fl);

if (floorOffl% 2==0) return floorOffl+1; return floorOffl; }

/** 加密函数 */

void Encipher(FOURBYTEINT* In,FOURBYTEINT* Out,FOURBYTEINT* S){ FOURBYTEINT X,Y; X = In[0]+S[0]; Y = In[1]+S[1];

for(int i=1;i<=r;i++){

X=ROTL((X^Y),Y) + S[2*i]; Y=ROTL((Y^X),X) + S[2*i+1]; }

Out[0]=X; Out[1]=Y; }

/** 解密函数 */

void Decipher(FOURBYTEINT* In,FOURBYTEINT* Out,FOURBYTEINT* S){ FOURBYTEINT X,Y; X = In[0]; Y = In[1];

for(int i=r;i>0;i--){

Y = ROTR(Y-S[2*i+1],X)^X; X = ROTR(X-S[2*i],Y)^Y; }

Out[0]=X - S[0]; Out[1]=Y - S[1];

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库RC4流密码算法之C语言实现在线全文阅读。

RC4流密码算法之C语言实现.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/894251.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: