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

📄 3des.h

📁 实现DES加密解密算法
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _3DES_H
#define _3DES_H
#include <stdio.h>
#include <Windows.h>
#include <string.h>
#include <memory.h>
#include <malloc.h>


#define bufsize 1024
#define NUM_WEAK_KEY 16
#define ITERATIONS 16 
#define OPENSSL_GLOBAL 
#define DES_KEY_SZ (sizeof(DES_cblock))
#define  DES_BLOCK_SIZE 8
#define DES_ENCRYPT 1 
#define DES_DECRYPT 0 

#define DES_LONG unsigned long 

typedef unsigned char DES_cblock[8];
typedef unsigned char const_DES_cblock[8];

typedef struct DES_ks
{
	union
	{
		DES_cblock cblock;
		DES_LONG deslong[2];
	} ks[16];
} DES_key_schedule;


OPENSSL_GLOBAL const DES_LONG DES_SPtrans[8][64]={
	{
		/* nibble 0 */
		0x02080800L, 0x00080000L, 0x02000002L, 0x02080802L,
			0x02000000L, 0x00080802L, 0x00080002L, 0x02000002L,
			0x00080802L, 0x02080800L, 0x02080000L, 0x00000802L,
			0x02000802L, 0x02000000L, 0x00000000L, 0x00080002L,
			0x00080000L, 0x00000002L, 0x02000800L, 0x00080800L,
			0x02080802L, 0x02080000L, 0x00000802L, 0x02000800L,
			0x00000002L, 0x00000800L, 0x00080800L, 0x02080002L,
			0x00000800L, 0x02000802L, 0x02080002L, 0x00000000L,
			0x00000000L, 0x02080802L, 0x02000800L, 0x00080002L,
			0x02080800L, 0x00080000L, 0x00000802L, 0x02000800L,
			0x02080002L, 0x00000800L, 0x00080800L, 0x02000002L,
			0x00080802L, 0x00000002L, 0x02000002L, 0x02080000L,
			0x02080802L, 0x00080800L, 0x02080000L, 0x02000802L,
			0x02000000L, 0x00000802L, 0x00080002L, 0x00000000L,
			0x00080000L, 0x02000000L, 0x02000802L, 0x02080800L,
			0x00000002L, 0x02080002L, 0x00000800L, 0x00080802L,
	},{
		/* nibble 1 */
		0x40108010L, 0x00000000L, 0x00108000L, 0x40100000L,
			0x40000010L, 0x00008010L, 0x40008000L, 0x00108000L,
			0x00008000L, 0x40100010L, 0x00000010L, 0x40008000L,
			0x00100010L, 0x40108000L, 0x40100000L, 0x00000010L,
			0x00100000L, 0x40008010L, 0x40100010L, 0x00008000L,
			0x00108010L, 0x40000000L, 0x00000000L, 0x00100010L,
			0x40008010L, 0x00108010L, 0x40108000L, 0x40000010L,
			0x40000000L, 0x00100000L, 0x00008010L, 0x40108010L,
			0x00100010L, 0x40108000L, 0x40008000L, 0x00108010L,
			0x40108010L, 0x00100010L, 0x40000010L, 0x00000000L,
			0x40000000L, 0x00008010L, 0x00100000L, 0x40100010L,
			0x00008000L, 0x40000000L, 0x00108010L, 0x40008010L,
			0x40108000L, 0x00008000L, 0x00000000L, 0x40000010L,
			0x00000010L, 0x40108010L, 0x00108000L, 0x40100000L,
			0x40100010L, 0x00100000L, 0x00008010L, 0x40008000L,
			0x40008010L, 0x00000010L, 0x40100000L, 0x00108000L,
	},{
		/* nibble 2 */
		0x04000001L, 0x04040100L, 0x00000100L, 0x04000101L,
			0x00040001L, 0x04000000L, 0x04000101L, 0x00040100L,
			0x04000100L, 0x00040000L, 0x04040000L, 0x00000001L,
			0x04040101L, 0x00000101L, 0x00000001L, 0x04040001L,
			0x00000000L, 0x00040001L, 0x04040100L, 0x00000100L,
			0x00000101L, 0x04040101L, 0x00040000L, 0x04000001L,
			0x04040001L, 0x04000100L, 0x00040101L, 0x04040000L,
			0x00040100L, 0x00000000L, 0x04000000L, 0x00040101L,
			0x04040100L, 0x00000100L, 0x00000001L, 0x00040000L,
			0x00000101L, 0x00040001L, 0x04040000L, 0x04000101L,
			0x00000000L, 0x04040100L, 0x00040100L, 0x04040001L,
			0x00040001L, 0x04000000L, 0x04040101L, 0x00000001L,
			0x00040101L, 0x04000001L, 0x04000000L, 0x04040101L,
			0x00040000L, 0x04000100L, 0x04000101L, 0x00040100L,
			0x04000100L, 0x00000000L, 0x04040001L, 0x00000101L,
			0x04000001L, 0x00040101L, 0x00000100L, 0x04040000L,
		},{
			/* nibble 3 */
			0x00401008L, 0x10001000L, 0x00000008L, 0x10401008L,
				0x00000000L, 0x10400000L, 0x10001008L, 0x00400008L,
				0x10401000L, 0x10000008L, 0x10000000L, 0x00001008L,
				0x10000008L, 0x00401008L, 0x00400000L, 0x10000000L,
				0x10400008L, 0x00401000L, 0x00001000L, 0x00000008L,
				0x00401000L, 0x10001008L, 0x10400000L, 0x00001000L,
				0x00001008L, 0x00000000L, 0x00400008L, 0x10401000L,
				0x10001000L, 0x10400008L, 0x10401008L, 0x00400000L,
				0x10400008L, 0x00001008L, 0x00400000L, 0x10000008L,
				0x00401000L, 0x10001000L, 0x00000008L, 0x10400000L,
				0x10001008L, 0x00000000L, 0x00001000L, 0x00400008L,
				0x00000000L, 0x10400008L, 0x10401000L, 0x00001000L,
				0x10000000L, 0x10401008L, 0x00401008L, 0x00400000L,
				0x10401008L, 0x00000008L, 0x10001000L, 0x00401008L,
				0x00400008L, 0x00401000L, 0x10400000L, 0x10001008L,
				0x00001008L, 0x10000000L, 0x10000008L, 0x10401000L,
		},{
			/* nibble 4 */
			0x08000000L, 0x00010000L, 0x00000400L, 0x08010420L,
				0x08010020L, 0x08000400L, 0x00010420L, 0x08010000L,
				0x00010000L, 0x00000020L, 0x08000020L, 0x00010400L,
				0x08000420L, 0x08010020L, 0x08010400L, 0x00000000L,
				0x00010400L, 0x08000000L, 0x00010020L, 0x00000420L,
				0x08000400L, 0x00010420L, 0x00000000L, 0x08000020L,
				0x00000020L, 0x08000420L, 0x08010420L, 0x00010020L,
				0x08010000L, 0x00000400L, 0x00000420L, 0x08010400L,
				0x08010400L, 0x08000420L, 0x00010020L, 0x08010000L,
				0x00010000L, 0x00000020L, 0x08000020L, 0x08000400L,
				0x08000000L, 0x00010400L, 0x08010420L, 0x00000000L,
				0x00010420L, 0x08000000L, 0x00000400L, 0x00010020L,
				0x08000420L, 0x00000400L, 0x00000000L, 0x08010420L,
				0x08010020L, 0x08010400L, 0x00000420L, 0x00010000L,
				0x00010400L, 0x08010020L, 0x08000400L, 0x00000420L,
				0x00000020L, 0x00010420L, 0x08010000L, 0x08000020L,
		},{
			/* nibble 5 */
			0x80000040L, 0x00200040L, 0x00000000L, 0x80202000L,
				0x00200040L, 0x00002000L, 0x80002040L, 0x00200000L,
				0x00002040L, 0x80202040L, 0x00202000L, 0x80000000L,
				0x80002000L, 0x80000040L, 0x80200000L, 0x00202040L,
				0x00200000L, 0x80002040L, 0x80200040L, 0x00000000L,
				0x00002000L, 0x00000040L, 0x80202000L, 0x80200040L,
				0x80202040L, 0x80200000L, 0x80000000L, 0x00002040L,
				0x00000040L, 0x00202000L, 0x00202040L, 0x80002000L,
				0x00002040L, 0x80000000L, 0x80002000L, 0x00202040L,
				0x80202000L, 0x00200040L, 0x00000000L, 0x80002000L,
				0x80000000L, 0x00002000L, 0x80200040L, 0x00200000L,
				0x00200040L, 0x80202040L, 0x00202000L, 0x00000040L,
				0x80202040L, 0x00202000L, 0x00200000L, 0x80002040L,
				0x80000040L, 0x80200000L, 0x00202040L, 0x00000000L,
				0x00002000L, 0x80000040L, 0x80002040L, 0x80202000L,
				0x80200000L, 0x00002040L, 0x00000040L, 0x80200040L,
			},{
				/* nibble 6 */
				0x00004000L, 0x00000200L, 0x01000200L, 0x01000004L,
					0x01004204L, 0x00004004L, 0x00004200L, 0x00000000L,
					0x01000000L, 0x01000204L, 0x00000204L, 0x01004000L,
					0x00000004L, 0x01004200L, 0x01004000L, 0x00000204L,
					0x01000204L, 0x00004000L, 0x00004004L, 0x01004204L,
					0x00000000L, 0x01000200L, 0x01000004L, 0x00004200L,
					0x01004004L, 0x00004204L, 0x01004200L, 0x00000004L,
					0x00004204L, 0x01004004L, 0x00000200L, 0x01000000L,
					0x00004204L, 0x01004000L, 0x01004004L, 0x00000204L,
					0x00004000L, 0x00000200L, 0x01000000L, 0x01004004L,
					0x01000204L, 0x00004204L, 0x00004200L, 0x00000000L,
					0x00000200L, 0x01000004L, 0x00000004L, 0x01000200L,
					0x00000000L, 0x01000204L, 0x01000200L, 0x00004200L,
					0x00000204L, 0x00004000L, 0x01004204L, 0x01000000L,
					0x01004200L, 0x00000004L, 0x00004004L, 0x01004204L,
					0x01000004L, 0x01004200L, 0x01004000L, 0x00004004L,
			},{
				/* nibble 7 */
				0x20800080L, 0x20820000L, 0x00020080L, 0x00000000L,
					0x20020000L, 0x00800080L, 0x20800000L, 0x20820080L,
					0x00000080L, 0x20000000L, 0x00820000L, 0x00020080L,
					0x00820080L, 0x20020080L, 0x20000080L, 0x20800000L,
					0x00020000L, 0x00820080L, 0x00800080L, 0x20020000L,
					0x20820080L, 0x20000080L, 0x00000000L, 0x00820000L,
					0x20000000L, 0x00800000L, 0x20020080L, 0x20800080L,
					0x00800000L, 0x00020000L, 0x20820000L, 0x00000080L,
					0x00800000L, 0x00020000L, 0x20000080L, 0x20820080L,
					0x00020080L, 0x20000000L, 0x00000000L, 0x00820000L,
					0x20800080L, 0x20020080L, 0x20020000L, 0x00800080L,
					0x20820000L, 0x00000080L, 0x00800080L, 0x20020000L,
					0x20820080L, 0x00800000L, 0x20800000L, 0x20000080L,
					0x00820000L, 0x00020080L, 0x20020080L, 0x20800000L,
					0x00000080L, 0x20820000L, 0x00820080L, 0x00000000L,
					0x20000000L, 0x20800080L, 0x00020000L, 0x00820080L,
			}};





#define LOAD_DATA(R,S,u,t,E0,E1,tmp) u=R^s[S ]; t=R^s[S+1]

#define LOAD_DATA_tmp(a,b,c,d,e,f) LOAD_DATA(a,b,c,d,e,f,g)

#define c2l(c,l)	(l =((DES_LONG)(*((c)++)))    , \
	l|=((DES_LONG)(*((c)++)))<< 8L, \
	l|=((DES_LONG)(*((c)++)))<<16L, \
	l|=((DES_LONG)(*((c)++)))<<24L)

#define l2c(l,c)	(*((c)++)=(unsigned char)(((l)     )&0xff), \
	*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
	*((c)++)=(unsigned char)(((l)>>16L)&0xff), \
	*((c)++)=(unsigned char)(((l)>>24L)&0xff))

#define ROTATE(a,n) (((a)>>(n))+((a)<<(32-(n))))


#define D_ENCRYPT(LL,R,S) {\
	LOAD_DATA_tmp(R,S,u,t,E0,E1); \
	t=ROTATE(t,4); \
	LL^=\
	DES_SPtrans[0][(u>> 2L)&0x3f]^ \
	DES_SPtrans[2][(u>>10L)&0x3f]^ \
	DES_SPtrans[4][(u>>18L)&0x3f]^ \
	DES_SPtrans[6][(u>>26L)&0x3f]^ \
	DES_SPtrans[1][(t>> 2L)&0x3f]^ \
	DES_SPtrans[3][(t>>10L)&0x3f]^ \
	DES_SPtrans[5][(t>>18L)&0x3f]^ \
	DES_SPtrans[7][(t>>26L)&0x3f]; }

#define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
	(b)^=(t),\
	(a)^=((t)<<(n)))

#define IP(l,r) \
{ \
	register DES_LONG tt; \
	PERM_OP(r,l,tt, 4,0x0f0f0f0fL); \
	PERM_OP(l,r,tt,16,0x0000ffffL); \
	PERM_OP(r,l,tt, 2,0x33333333L); \
	PERM_OP(l,r,tt, 8,0x00ff00ffL); \
	PERM_OP(r,l,tt, 1,0x55555555L); \
}

#define FP(l,r) \
{ \
	register DES_LONG tt; \
	PERM_OP(l,r,tt, 1,0x55555555L); \
	PERM_OP(r,l,tt, 8,0x00ff00ffL); \
	PERM_OP(l,r,tt, 2,0x33333333L); \
	PERM_OP(r,l,tt,16,0x0000ffffL); \
	PERM_OP(l,r,tt, 4,0x0f0f0f0fL); \

⌨️ 快捷键说明

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