首页
社区
课程
招聘
[推荐]三重DES算法源代码(C)
发表于: 2009-5-20 22:00 8396

[推荐]三重DES算法源代码(C)

2009-5-20 22:00
8396

1.头定义

* d3des.h - 
* 
*    Headers and defines for d3des.c 
*    Graven Imagery, 1992. 
* 
* Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge 
*    (GEnie : OUTER; CIS : [71755,204]) 
*/ 
 
#define D2_DES        /* include double-length support */ 
#define D3_DES        /* include triple-length support */ 
 
#ifdef D3_DES 
#ifndef D2_DES 
#define D2_DES        /* D2_DES is needed for D3_DES */ 
#endif 
#endif 
 
#define EN0    0    /* MODE == encrypt */ 
#define DE1    1    /* MODE == decrypt */ 
 
/* A useful alias on 68000-ish machines, but NOT USED HERE. */ 
 
typedef union { 
   unsigned long blok[2]; 
   unsigned short word[4]; 
   unsigned char byte[8]; 
   } M68K; 
 
extern void deskey(unsigned char *, short); 
/*             hexkey[8]   MODE 
* Sets the internal key register according to the hexadecimal 
* key contained in the 8 bytes of hexkey, according to the DES, 
* for encryption or decryption according to MODE. 
*/ 
 
extern void usekey(unsigned long *); 
/*           cookedkey[32] 
* Loads the internal key register with the data in cookedkey. 
*/ 
 
extern void cpkey(unsigned long *); 
/*           cookedkey[32] 
* Copies the contents of the internal key register into the storage 
* located at &cookedkey[0]. 
*/ 
 
extern void des(unsigned char *, unsigned char *); 
/*           from[8]         to[8] 
* Encrypts/Decrypts (according to the key currently loaded in the 
* internal key register) one block of eight bytes at address 'from' 
* into the block at address 'to'. They can be the same. 
*/ 
 
#ifdef D2_DES 
 
#define desDkey(a,b)    des2key((a),(b)) 
extern void des2key(unsigned char *, short); 
/*             hexkey[16]   MODE 
* Sets the internal key registerS according to the hexadecimal 
* keyS contained in the 16 bytes of hexkey, according to the DES, 
* for DOUBLE encryption or decryption according to MODE. 
* NOTE: this clobbers all three key registers! 
*/ 
 
extern void Ddes(unsigned char *, unsigned char *); 
/*           from[8]         to[8] 
* Encrypts/Decrypts (according to the keyS currently loaded in the 
* internal key registerS) one block of eight bytes at address 'from' 
* into the block at address 'to'. They can be the same. 
*/ 
 
extern void D2des(unsigned char *, unsigned char *); 
/*           from[16]         to[16] 
* Encrypts/Decrypts (according to the keyS currently loaded in the 
* internal key registerS) one block of SIXTEEN bytes at address 'from' 
* into the block at address 'to'. They can be the same. 
*/ 
 
extern void makekey(char *, unsigned char *); 
/*        *password,    single-length key[8] 
* With a double-length default key, this routine hashes a NULL-terminated 
* string into an eight-byte random-looking key, suitable for use with the 
* deskey() routine. 
*/ 
 
#define makeDkey(a,b)    make2key((a),(b)) 
extern void make2key(char *, unsigned char *); 
/*        *password,    double-length key[16] 
* With a double-length default key, this routine hashes a NULL-terminated 
* string into a sixteen-byte random-looking key, suitable for use with the 
* des2key() routine. 
*/ 
 
#ifndef D3_DES    /* D2_DES only */ 
 
#define useDkey(a)    use2key((a)) 
#define cpDkey(a)    cp2key((a)) 
 
extern void use2key(unsigned long *); 
/*           cookedkey[64] 
* Loads the internal key registerS with the data in cookedkey. 
* NOTE: this clobbers all three key registers! 
*/ 
 
extern void cp2key(unsigned long *); 
/*           cookedkey[64] 
* Copies the contents of the internal key registerS into the storage 
* located at &cookedkey[0]. 
*/ 
 
#else    /* D3_DES too */ 
 
#define useDkey(a)    use3key((a)) 
#define cpDkey(a)    cp3key((a)) 
 
extern void des3key(unsigned char *, short); 
/*             hexkey[24]   MODE 
* Sets the internal key registerS according to the hexadecimal 
* keyS contained in the 24 bytes of hexkey, according to the DES, 
* for DOUBLE encryption or decryption according to MODE. 
*/ 
 
extern void use3key(unsigned long *); 
/*           cookedkey[96] 
* Loads the 3 internal key registerS with the data in cookedkey. 
*/ 
 
extern void cp3key(unsigned long *); 
/*           cookedkey[96] 
* Copies the contents of the 3 internal key registerS into the storage 
* located at &cookedkey[0]. 
*/ 
 
extern void make3key(char *, unsigned char *); 
/*        *password,    triple-length key[24] 
* With a triple-length default key, this routine hashes a NULL-terminated 
* string into a twenty-four-byte random-looking key, suitable for use with 
* the des3key() routine. 
*/ 
 
#endif    /* D3_DES */ 
#endif    /* D2_DES */ 
 
/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery 
********************************************************************/ 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有没有ASM的
2009-5-20 22:08
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
为什么在我这显示有很多框框?
2009-5-20 22:20
0
雪    币: 411
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主贴了好几个代码。谢谢。
2009-5-21 09:53
0
雪    币: 304
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
希望和大家分享一下,呵呵!
2009-5-21 10:17
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
6
Thanks for share.
2009-6-3 19:04
0
游客
登录 | 注册 方可回帖
返回
//