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

📄 sshcrypto.c

📁 一个网络工具包,可以嗅探email和http等数据包中的密码等信息.注意要先把libnet-1.0.2a.tar.gz和 libnids-1.16.tar.gz装上,不然会因为缺少库函数而无法编译和安
💻 C
字号:
/*  sshcrypto.c  SSH-1 crypto routines, adapted from OpenSSH.  Copyright (c) 2000 Dug Song <dugsong@monkey.org>  Copyright (c) 2000 Niels Provos <provos@monkey.org>  Copyright (c) 2000 Markus Friedl <markus@openbsd.org>    $Id: sshcrypto.c,v 1.4 2000/11/28 21:23:28 dugsong Exp $*/#include "config.h"#include <sys/types.h>#include <openssl/ssl.h>#include <err.h>#include <stdio.h>#include <stdlib.h>#include "sshcrypto.h"struct blowfish_state {	struct bf_key_st	key;	u_char			iv[8];};struct des3_state {	des_key_schedule	k1, k2, k3;	des_cblock		iv1, iv2, iv3;};voidrsa_public_encrypt(BIGNUM *out, BIGNUM *in, RSA *key){	u_char *inbuf, *outbuf;	int len, ilen, olen;	if (BN_num_bits(key->e) < 2 || !BN_is_odd(key->e))		errx(1, "rsa_public_encrypt() exponent too small or not odd");	olen = BN_num_bytes(key->n);	outbuf = malloc(olen);	ilen = BN_num_bytes(in);	inbuf = malloc(ilen);	if (outbuf == NULL || inbuf == NULL)		err(1, "malloc");		BN_bn2bin(in, inbuf);		if ((len = RSA_public_encrypt(ilen, inbuf, outbuf, key,				      RSA_PKCS1_PADDING)) <= 0)		errx(1, "rsa_public_encrypt() failed");	BN_bin2bn(outbuf, len, out);	memset(outbuf, 0, olen);	memset(inbuf, 0, ilen);	free(outbuf);	free(inbuf);}voidrsa_private_decrypt(BIGNUM *out, BIGNUM *in, RSA *key){	u_char *inbuf, *outbuf;	int len, ilen, olen;	olen = BN_num_bytes(key->n);	outbuf = malloc(olen);	ilen = BN_num_bytes(in);	inbuf = malloc(ilen);	if (outbuf == NULL || inbuf == NULL)		err(1, "malloc");		BN_bn2bin(in, inbuf);	if ((len = RSA_private_decrypt(ilen, inbuf, outbuf, key,				       RSA_PKCS1_PADDING)) <= 0)		errx(1, "rsa_private_decrypt() failed");		BN_bin2bn(outbuf, len, out);	memset(outbuf, 0, olen);	memset(inbuf, 0, ilen);	free(outbuf);	free(inbuf);}/* XXX - SSH1's weirdo Blowfish... */static voidswap_bytes(const u_char *src, u_char *dst, int n){	char c[4];		for (n = n / 4; n > 0; n--) {		c[3] = *src++; c[2] = *src++;		c[1] = *src++; c[0] = *src++;		*dst++ = c[0]; *dst++ = c[1];		*dst++ = c[2]; *dst++ = c[3];	}}void *blowfish_init(u_char *sesskey, int len){	struct blowfish_state *state;	if ((state = malloc(sizeof(*state))) == NULL)		err(1, "malloc");		BF_set_key(&state->key, len, sesskey);	memset(state->iv, 0, 8);	return (state);}voidblowfish_encrypt(u_char *src, u_char *dst, int len, void *state){	struct blowfish_state *estate;	estate = (struct blowfish_state *)state;	swap_bytes(src, dst, len);	BF_cbc_encrypt((void *)dst, dst, len, &estate->key, estate->iv,		       BF_ENCRYPT);	swap_bytes(dst, dst, len);}voidblowfish_decrypt(u_char *src, u_char *dst, int len, void *state){	struct blowfish_state *dstate;	dstate = (struct blowfish_state *)state;	swap_bytes(src, dst, len);	BF_cbc_encrypt((void *)dst, dst, len, &dstate->key, dstate->iv,		       BF_DECRYPT);	swap_bytes(dst, dst, len);}/* XXX - SSH1's weirdo 3DES... */void *des3_init(u_char *sesskey, int len){	struct des3_state *state;		if ((state = malloc(sizeof(*state))) == NULL)		err(1, "malloc");	des_set_key((void *)sesskey, state->k1);	des_set_key((void *)(sesskey + 8), state->k2);	if (len <= 16)		des_set_key((void *)sesskey, state->k3);	else		des_set_key((void *)(sesskey + 16), state->k3);		memset(state->iv1, 0, 8);	memset(state->iv2, 0, 8);	memset(state->iv3, 0, 8);		return (state);}voiddes3_encrypt(u_char *src, u_char *dst, int len, void *state){	struct des3_state *estate;	estate = (struct des3_state *)state;	memcpy(estate->iv1, estate->iv2, 8);		des_ncbc_encrypt(src, dst, len, estate->k1, &estate->iv1, DES_ENCRYPT);	des_ncbc_encrypt(dst, dst, len, estate->k2, &estate->iv2, DES_DECRYPT);	des_ncbc_encrypt(dst, dst, len, estate->k3, &estate->iv3, DES_ENCRYPT);}voiddes3_decrypt(u_char *src, u_char *dst, int len, void *state){	struct des3_state *dstate;		dstate = (struct des3_state *)state;	memcpy(dstate->iv1, dstate->iv2, 8);		des_ncbc_encrypt(src, dst, len, dstate->k3, &dstate->iv3, DES_DECRYPT);	des_ncbc_encrypt(dst, dst, len, dstate->k2, &dstate->iv2, DES_ENCRYPT);	des_ncbc_encrypt(dst, dst, len, dstate->k1, &dstate->iv1, DES_DECRYPT);}

⌨️ 快捷键说明

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