⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfb_enc.c

📁 一个DES、3DES加解密的库文件
💻 C
字号:
/* cfb_enc.c *//* Copyright (C) 1993 Eric Young - see README for more details */#include "des_locl.h"/* The input and output are loaded in multiples of 8 bits. * What this means is that if you hame numbits=12 and length=2 * the first 12 bits will be retrieved from the first byte and half * the second.  The second 12 bits will come from the 3rd and half the 4th * byte. */int des_cfb_encrypt(in,out,numbits,length,schedule,ivec,encrypt)unsigned char *in,*out;int numbits;long length;des_key_schedule schedule;des_cblock *ivec;int encrypt;	{	register unsigned long d0,d1,v0,v1,n=(numbits+7)/8;	register unsigned long mask0,mask1;	register long l=length;	register int num=numbits;	unsigned long ti[2],to[2];	unsigned char *iv;	if (num > 64) return(0);	if (num > 32)		{		mask0=0xffffffff;		if (num == 64)			mask1=mask0;		else			mask1=(1L<<(num-32))-1;		}	else		{		if (num == 32)			mask0=0xffffffff;		else			mask0=(1L<<num)-1;		mask1=0x00000000;		}	iv=(unsigned char *)ivec;	c2l(iv,v0);	c2l(iv,v1);	if (encrypt)		{		while (l-- > 0)			{			ti[0]=v0;			ti[1]=v1;			des_encrypt((unsigned long *)ti,(unsigned long *)to,					schedule,DES_ENCRYPT);			c2ln(in,d0,d1,n);			in+=n;			d0=(d0^to[0])&mask0;			d1=(d1^to[1])&mask1;			l2cn(d0,d1,out,n);			out+=n;			if (num > 32)				{				v0=((v1>>(num-32))|(d0<<(64-num)))&0xffffffff;				v1=((d0>>(num-32))|(d1<<(64-num)))&0xffffffff;				}			else				{				v0=((v0>>num)|(v1<<(32-num)))&0xffffffff;				v1=((v1>>num)|(d0<<(32-num)))&0xffffffff;				}			}		}	else		{		while (l-- > 0)			{			ti[0]=v0;			ti[1]=v1;			des_encrypt((unsigned long *)ti,(unsigned long *)to,					schedule,DES_ENCRYPT);			c2ln(in,d0,d1,n);			in+=n;			if (num > 32)				{				v0=((v1>>(num-32))|(d0<<(64-num)))&0xffffffff;				v1=((d0>>(num-32))|(d1<<(64-num)))&0xffffffff;				}			else				{				v0=((v0>>num)|(v1<<(32-num)))&0xffffffff;				v1=((v1>>num)|(d0<<(32-num)))&0xffffffff;				}			d0=(d0^to[0])&mask0;			d1=(d1^to[1])&mask1;			l2cn(d0,d1,out,n);			out+=n;			}		}	iv=(unsigned char *)ivec;	l2c(v0,iv);	l2c(v1,iv);	v0=v1=d0=d1=ti[0]=ti[1]=to[0]=to[1]=0;	return(0);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -