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

📄 str2key.c

📁 一个DES、3DES加解密的库文件
💻 C
字号:
/* str2key.c *//* Copyright (C) 1993 Eric Young - see README for more details */#include "des_locl.h"extern int des_check_key;int des_string_to_key(str,key)char *str;des_cblock *key;	{	des_key_schedule ks;	int i,length;	register unsigned char j;	bzero(key,8);	length=strlen(str);#ifdef OLD_STR_TO_KEY	for (i=0; i<length; i++)		(*key)[i%8]^=(str[i]<<1);#else /* MIT COMPATIBLE */	for (i=0; i<length; i++)		{		j=str[i];		if ((i%16) < 8)			(*key)[i%8]^=(j<<1);		else			{			/* Reverse the bit order 05/05/92 eay */			j=((j<<4)&0xf0)|((j>>4)&0x0f);			j=((j<<2)&0xcc)|((j>>2)&0x33);			j=((j<<1)&0xaa)|((j>>1)&0x55);			(*key)[7-(i%8)]^=j;			}		}#endif	des_set_odd_parity((des_cblock *)key);	i=des_check_key;	des_check_key=0;	des_set_key((des_cblock *)key,ks);	des_check_key=i;	des_cbc_cksum((des_cblock *)str,(des_cblock *)key,(long)length,ks,		(des_cblock *)key);	bzero(ks,sizeof(ks));	des_set_odd_parity((des_cblock *)key);	return(0);	}int des_string_to_2keys(str,key1,key2)char *str;des_cblock *key1,*key2;	{	des_key_schedule ks;	int i,length;	register unsigned char j;	bzero(key1,8);	bzero(key2,8);	length=strlen(str);#ifdef OLD_STR_TO_KEY	if (length <= 8)		{		for (i=0; i<length; i++)			{			(*key2)[i]=(*key1)[i]=(str[i]<<1);			}		}	else		{		for (i=0; i<length; i++)			{			if ((i/8)&1)				(*key2)[i%8]^=(str[i]<<1);			else				(*key1)[i%8]^=(str[i]<<1);			}		}#else /* MIT COMPATIBLE */	for (i=0; i<length; i++)		{		j=str[i];		if ((i%32) < 16)			{			if ((i%16) < 8)				(*key1)[i%8]^=(j<<1);			else				(*key2)[i%8]^=(j<<1);			}		else			{			j=((j<<4)&0xf0)|((j>>4)&0x0f);			j=((j<<2)&0xcc)|((j>>2)&0x33);			j=((j<<1)&0xaa)|((j>>1)&0x55);			if ((i%16) < 8)				(*key1)[7-(i%8)]^=j;			else				(*key2)[7-(i%8)]^=j;			}		}	if (length <= 8) bcopy(key1,key2,8);#endif	des_set_odd_parity((des_cblock *)key1);	des_set_odd_parity((des_cblock *)key2);	i=des_check_key;	des_check_key=0;	des_set_key((des_cblock *)key1,ks);	des_cbc_cksum((des_cblock *)str,(des_cblock *)key1,(long)length,ks,		(des_cblock *)key1);	des_set_key((des_cblock *)key2,ks);	des_cbc_cksum((des_cblock *)str,(des_cblock *)key2,(long)length,ks,		(des_cblock *)key2);	des_check_key=i;	bzero(ks,sizeof(ks));	des_set_odd_parity(key1);	des_set_odd_parity(key2);	return(0);	}

⌨️ 快捷键说明

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