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

📄 des.c

📁 在x86平台上运行不可信任代码的sandbox。
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "os.h"#include "libsec.h"/* * integrated sbox & p perm */static u32int spbox[] = {0x00808200,0x00000000,0x00008000,0x00808202,0x00808002,0x00008202,0x00000002,0x00008000,0x00000200,0x00808200,0x00808202,0x00000200,0x00800202,0x00808002,0x00800000,0x00000002,0x00000202,0x00800200,0x00800200,0x00008200,0x00008200,0x00808000,0x00808000,0x00800202,0x00008002,0x00800002,0x00800002,0x00008002,0x00000000,0x00000202,0x00008202,0x00800000,0x00008000,0x00808202,0x00000002,0x00808000,0x00808200,0x00800000,0x00800000,0x00000200,0x00808002,0x00008000,0x00008200,0x00800002,0x00000200,0x00000002,0x00800202,0x00008202,0x00808202,0x00008002,0x00808000,0x00800202,0x00800002,0x00000202,0x00008202,0x00808200,0x00000202,0x00800200,0x00800200,0x00000000,0x00008002,0x00008200,0x00000000,0x00808002,0x40084010,0x40004000,0x00004000,0x00084010,0x00080000,0x00000010,0x40080010,0x40004010,0x40000010,0x40084010,0x40084000,0x40000000,0x40004000,0x00080000,0x00000010,0x40080010,0x00084000,0x00080010,0x40004010,0x00000000,0x40000000,0x00004000,0x00084010,0x40080000,0x00080010,0x40000010,0x00000000,0x00084000,0x00004010,0x40084000,0x40080000,0x00004010,0x00000000,0x00084010,0x40080010,0x00080000,0x40004010,0x40080000,0x40084000,0x00004000,0x40080000,0x40004000,0x00000010,0x40084010,0x00084010,0x00000010,0x00004000,0x40000000,0x00004010,0x40084000,0x00080000,0x40000010,0x00080010,0x40004010,0x40000010,0x00080010,0x00084000,0x00000000,0x40004000,0x00004010,0x40000000,0x40080010,0x40084010,0x00084000,0x00000104,0x04010100,0x00000000,0x04010004,0x04000100,0x00000000,0x00010104,0x04000100,0x00010004,0x04000004,0x04000004,0x00010000,0x04010104,0x00010004,0x04010000,0x00000104,0x04000000,0x00000004,0x04010100,0x00000100,0x00010100,0x04010000,0x04010004,0x00010104,0x04000104,0x00010100,0x00010000,0x04000104,0x00000004,0x04010104,0x00000100,0x04000000,0x04010100,0x04000000,0x00010004,0x00000104,0x00010000,0x04010100,0x04000100,0x00000000,0x00000100,0x00010004,0x04010104,0x04000100,0x04000004,0x00000100,0x00000000,0x04010004,0x04000104,0x00010000,0x04000000,0x04010104,0x00000004,0x00010104,0x00010100,0x04000004,0x04010000,0x04000104,0x00000104,0x04010000,0x00010104,0x00000004,0x04010004,0x00010100,0x80401000,0x80001040,0x80001040,0x00000040,0x00401040,0x80400040,0x80400000,0x80001000,0x00000000,0x00401000,0x00401000,0x80401040,0x80000040,0x00000000,0x00400040,0x80400000,0x80000000,0x00001000,0x00400000,0x80401000,0x00000040,0x00400000,0x80001000,0x00001040,0x80400040,0x80000000,0x00001040,0x00400040,0x00001000,0x00401040,0x80401040,0x80000040,0x00400040,0x80400000,0x00401000,0x80401040,0x80000040,0x00000000,0x00000000,0x00401000,0x00001040,0x00400040,0x80400040,0x80000000,0x80401000,0x80001040,0x80001040,0x00000040,0x80401040,0x80000040,0x80000000,0x00001000,0x80400000,0x80001000,0x00401040,0x80400040,0x80001000,0x00001040,0x00400000,0x80401000,0x00000040,0x00400000,0x00001000,0x00401040,0x00000080,0x01040080,0x01040000,0x21000080,0x00040000,0x00000080,0x20000000,0x01040000,0x20040080,0x00040000,0x01000080,0x20040080,0x21000080,0x21040000,0x00040080,0x20000000,0x01000000,0x20040000,0x20040000,0x00000000,0x20000080,0x21040080,0x21040080,0x01000080,0x21040000,0x20000080,0x00000000,0x21000000,0x01040080,0x01000000,0x21000000,0x00040080,0x00040000,0x21000080,0x00000080,0x01000000,0x20000000,0x01040000,0x21000080,0x20040080,0x01000080,0x20000000,0x21040000,0x01040080,0x20040080,0x00000080,0x01000000,0x21040000,0x21040080,0x00040080,0x21000000,0x21040080,0x01040000,0x00000000,0x20040000,0x21000000,0x00040080,0x01000080,0x20000080,0x00040000,0x00000000,0x20040000,0x01040080,0x20000080,0x10000008,0x10200000,0x00002000,0x10202008,0x10200000,0x00000008,0x10202008,0x00200000,0x10002000,0x00202008,0x00200000,0x10000008,0x00200008,0x10002000,0x10000000,0x00002008,0x00000000,0x00200008,0x10002008,0x00002000,0x00202000,0x10002008,0x00000008,0x10200008,0x10200008,0x00000000,0x00202008,0x10202000,0x00002008,0x00202000,0x10202000,0x10000000,0x10002000,0x00000008,0x10200008,0x00202000,0x10202008,0x00200000,0x00002008,0x10000008,0x00200000,0x10002000,0x10000000,0x00002008,0x10000008,0x10202008,0x00202000,0x10200000,0x00202008,0x10202000,0x00000000,0x10200008,0x00000008,0x00002000,0x10200000,0x00202008,0x00002000,0x00200008,0x10002008,0x00000000,0x10202000,0x10000000,0x00200008,0x10002008,0x00100000,0x02100001,0x02000401,0x00000000,0x00000400,0x02000401,0x00100401,0x02100400,0x02100401,0x00100000,0x00000000,0x02000001,0x00000001,0x02000000,0x02100001,0x00000401,0x02000400,0x00100401,0x00100001,0x02000400,0x02000001,0x02100000,0x02100400,0x00100001,0x02100000,0x00000400,0x00000401,0x02100401,0x00100400,0x00000001,0x02000000,0x00100400,0x02000000,0x00100400,0x00100000,0x02000401,0x02000401,0x02100001,0x02100001,0x00000001,0x00100001,0x02000000,0x02000400,0x00100000,0x02100400,0x00000401,0x00100401,0x02100400,0x00000401,0x02000001,0x02100401,0x02100000,0x00100400,0x00000000,0x00000001,0x02100401,0x00000000,0x00100401,0x02100000,0x00000400,0x02000001,0x02000400,0x00000400,0x00100001,0x08000820,0x00000800,0x00020000,0x08020820,0x08000000,0x08000820,0x00000020,0x08000000,0x00020020,0x08020000,0x08020820,0x00020800,0x08020800,0x00020820,0x00000800,0x00000020,0x08020000,0x08000020,0x08000800,0x00000820,0x00020800,0x00020020,0x08020020,0x08020800,0x00000820,0x00000000,0x00000000,0x08020020,0x08000020,0x08000800,0x00020820,0x00020000,0x00020820,0x00020000,0x08020800,0x00000800,0x00000020,0x08020020,0x00000800,0x00020820,0x08000800,0x00000020,0x08000020,0x08020000,0x08020020,0x08000000,0x00020000,0x08000820,0x00000000,0x08020820,0x00020020,0x08000020,0x08020000,0x08000800,0x08000820,0x00000000,0x08020820,0x00020800,0x00020800,0x00000820,0x00000820,0x00020020,0x08000000,0x08020800,};/* * for manual index calculation * #define fetch(box, i, sh) (*((u32int*)((uchar*)spbox + (box << 8) + ((i >> (sh)) & 0xfc)))) */#define fetch(box, i, sh) ((spbox+(box << 6))[((i >> (sh + 2)) & 0x3f)])/* * DES electronic codebook encryption of one block */voidblock_cipher(ulong key[32], uchar text[8], int decrypting){	u32int right, left, v0, v1;	int i, keystep;	/*	 * initial permutation	 */	v0 = text[0] | ((u32int)text[2]<<8) | ((u32int)text[4]<<16) | ((u32int)text[6]<<24);	left = text[1] | ((u32int)text[3]<<8) | ((u32int)text[5]<<16) | ((u32int)text[7]<<24);	right = (left & 0xaaaaaaaa) | ((v0 >> 1) & 0x55555555);	left = ((left << 1) & 0xaaaaaaaa) | (v0 & 0x55555555);	left = ((left << 6) & 0x33003300)		| (left & 0xcc33cc33)		| ((left >> 6) & 0x00cc00cc);	left = ((left << 12) & 0x0f0f0000)		| (left & 0xf0f00f0f)		| ((left >> 12) & 0x0000f0f0);	right = ((right << 6) & 0x33003300)		| (right & 0xcc33cc33)		| ((right >> 6) & 0x00cc00cc);	right = ((right << 12) & 0x0f0f0000)		| (right & 0xf0f00f0f)		| ((right >> 12) & 0x0000f0f0);	if (decrypting) {		keystep = -2;		key = key + 32 - 2;	} else		keystep = 2;	for (i = 0; i < 8; i++) {		v0 = key[0];		v0 ^= (right >> 1) | (right << 31);		left ^= fetch(0, v0, 24)			^ fetch(2, v0, 16)			^ fetch(4, v0, 8)			^ fetch(6, v0, 0);		v1 = key[1];		v1 ^= (right << 3) | (right >> 29);		left ^= fetch(1, v1, 24)			^ fetch(3, v1, 16)			^ fetch(5, v1, 8)			^ fetch(7, v1, 0);		key += keystep;				v0 = key[0];		v0 ^= (left >> 1) | (left << 31);		right ^= fetch(0, v0, 24)			^ fetch(2, v0, 16)			^ fetch(4, v0, 8)			^ fetch(6, v0, 0);		v1 = key[1];		v1 ^= (left << 3) | (left >> 29);		right ^= fetch(1, v1, 24)			^ fetch(3, v1, 16)			^ fetch(5, v1, 8)			^ fetch(7, v1, 0);		key += keystep;	}	/*	 * final permutation, inverse initial permutation	 */	v0 = ((left << 1) & 0xaaaaaaaa) | (right & 0x55555555);	v1 = (left & 0xaaaaaaaa) | ((right >> 1) & 0x55555555);	v1 = ((v1 << 6) & 0x33003300)		| (v1 & 0xcc33cc33)		| ((v1 >> 6) & 0x00cc00cc);	v1 = ((v1 << 12) & 0x0f0f0000)		| (v1 & 0xf0f00f0f)		| ((v1 >> 12) & 0x0000f0f0);	v0 = ((v0 << 6) & 0x33003300)		| (v0 & 0xcc33cc33)		| ((v0 >> 6) & 0x00cc00cc);	v0 = ((v0 << 12) & 0x0f0f0000)		| (v0 & 0xf0f00f0f)		| ((v0 >> 12) & 0x0000f0f0);	text[0] = v0;	text[2] = v0 >> 8;	text[4] = v0 >> 16;	text[6] = v0 >> 24;	text[1] = v1;	text[3] = v1 >> 8;	text[5] = v1 >> 16;	text[7] = v1 >> 24;}/* * triple DES electronic codebook encryption of one block */voidtriple_block_cipher(ulong expanded_key[3][32], uchar text[8], int ende){	ulong *key;	u32int right, left, v0, v1;	int i, j, keystep;	/*	 * initial permutation	 */	v0 = text[0] | ((u32int)text[2]<<8) | ((u32int)text[4]<<16) | ((u32int)text[6]<<24);	left = text[1] | ((u32int)text[3]<<8) | ((u32int)text[5]<<16) | ((u32int)text[7]<<24);	right = (left & 0xaaaaaaaa) | ((v0 >> 1) & 0x55555555);	left = ((left << 1) & 0xaaaaaaaa) | (v0 & 0x55555555);	left = ((left << 6) & 0x33003300)		| (left & 0xcc33cc33)		| ((left >> 6) & 0x00cc00cc);	left = ((left << 12) & 0x0f0f0000)		| (left & 0xf0f00f0f)		| ((left >> 12) & 0x0000f0f0);	right = ((right << 6) & 0x33003300)		| (right & 0xcc33cc33)		| ((right >> 6) & 0x00cc00cc);	right = ((right << 12) & 0x0f0f0000)		| (right & 0xf0f00f0f)		| ((right >> 12) & 0x0000f0f0);	for(j = 0; j < 3; j++){		if((ende & 1) == DES3D) {			key = &expanded_key[2-j][32-2];			keystep = -2;		} else {			key = &expanded_key[j][0];			keystep = 2;		}		ende >>= 1;		for (i = 0; i < 8; i++) {			v0 = key[0];			v0 ^= (right >> 1) | (right << 31);			left ^= fetch(0, v0, 24)				^ fetch(2, v0, 16)				^ fetch(4, v0, 8)				^ fetch(6, v0, 0);			v1 = key[1];			v1 ^= (right << 3) | (right >> 29);			left ^= fetch(1, v1, 24)				^ fetch(3, v1, 16)				^ fetch(5, v1, 8)				^ fetch(7, v1, 0);			key += keystep;						v0 = key[0];			v0 ^= (left >> 1) | (left << 31);			right ^= fetch(0, v0, 24)				^ fetch(2, v0, 16)				^ fetch(4, v0, 8)				^ fetch(6, v0, 0);			v1 = key[1];			v1 ^= (left << 3) | (left >> 29);			right ^= fetch(1, v1, 24)

⌨️ 快捷键说明

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