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

📄 xcrypt.c

📁 早期freebsd实现
💻 C
字号:
#ifndef lintstatic char sccsid[] = "@(#)xcrypt.c	2.2 88/08/10 4.0 RPCSRC";#endif/* * Sun RPC is a product of Sun Microsystems, Inc. and is provided for * unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part.  Users * may copy or modify Sun RPC without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. *  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. *  * Sun RPC is provided with no support and without any obligation on the * part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. *  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC * OR ANY PART THEREOF. *  * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. *  * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California  94043 *//* * Hex encryption/decryption and utility routines * * Copyright (C) 1986, Sun Microsystems, Inc.  */#include <stdio.h>#include <des_crypt.h>extern char *malloc();extern char hex[];	/* forward */static char hexval();/* * Encrypt a secret key given passwd * The secret key is passed and returned in hex notation. * Its length must be a multiple of 16 hex digits (64 bits). */xencrypt(secret, passwd)	char *secret;	char *passwd;{	char key[8];	char ivec[8];	char *buf;	int err;	int len;	len = strlen(secret) / 2;	buf = malloc((unsigned)len);	hex2bin(len, secret, buf);	passwd2des(passwd, key);	bzero(ivec, 8);	err = cbc_crypt(key, buf, len, DES_ENCRYPT | DES_HW, ivec);	if (DES_FAILED(err)) {			free(buf);		return (0);	}	bin2hex(len, (unsigned char *) buf, secret);	free(buf);	return (1);}/* * Decrypt secret key using passwd * The secret key is passed and returned in hex notation. * Once again, the length is a multiple of 16 hex digits */xdecrypt(secret, passwd)	char *secret;	char *passwd;{	char key[8];	char ivec[8];	char *buf;	int err;	int len;	len = strlen(secret) / 2;	buf = malloc((unsigned)len);	hex2bin(len, secret, buf);	passwd2des(passwd, key);		bzero(ivec, 8);	err = cbc_crypt(key, buf, len, DES_DECRYPT | DES_HW, ivec);	if (DES_FAILED(err)) {		free(buf);		return (0);	}	bin2hex(len, (unsigned char *) buf, secret);	free(buf);	return (1);}/* * Turn password into DES key */passwd2des(pw, key)	char *pw;	char *key;{	int i;	bzero(key, 8);	for (i = 0; *pw; i = (i+1)%8) {		key[i] ^= *pw++ << 1;	}	des_setparity(key);}/* * Hex to binary conversion */statichex2bin(len, hexnum, binnum)	int len;	char *hexnum;	char *binnum;{	int i;	for (i = 0; i < len; i++) {		*binnum++ = 16 * hexval(hexnum[2*i]) + hexval(hexnum[2*i+1]);		}}/* * Binary to hex conversion */staticbin2hex(len, binnum, hexnum)	int len;	unsigned char *binnum;	char *hexnum;{	int i;	unsigned val;	for (i = 0; i < len; i++) {		val = binnum[i];		hexnum[i*2] = hex[val >> 4];		hexnum[i*2+1] = hex[val & 0xf];	}	hexnum[len*2] = 0;}static char hex[16] = {	'0', '1', '2', '3', '4', '5', '6', '7',	'8', '9', 'a', 'b', 'c', 'd', 'e', 'f',};static charhexval(c)	char c;{	if (c >= '0' && c <= '9') {		return (c - '0');	} else if (c >= 'a' && c <= 'z') {		return (c - 'a' + 10);	} else if (c >= 'A' && c <= 'Z') {		return (c - 'A' + 10);	} else {		return (-1);	}}

⌨️ 快捷键说明

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