简单的加密Crypt 类

(Crypt.h)

#ifndef _CRYPT_H_
#define _CRYPT_H_

#include <Windows.h>

class CCrypt
{
public :
	static BOOL Encrypt (BYTE *source, BYTE *destination, DWORD length) ;
	static BOOL Decrypt (BYTE *source, BYTE *destination, DWORD length) ;
};

#endif //~_CRYPT_H_

(Crypt.cpp)

#include "Crypt.h"

const INT C1 = 52845;
const INT C2 = 22719;
const INT KEY = 72957;

//进行加密的函数
BOOL CCrypt::Encrypt (BYTE *source , BYTE *destination, DWORD length)
{
	DWORD i;
	INT Key = KEY;
	
	if(!source || !destination || length <= 0)
		return FALSE;

	for (i = 0; i < length; i++) //加密为 BYTE 单位
	{
		destination[i] = source [i]^Key >> 8;
		//按照 Key 值进行 1BYTE 的平方,推 8bit 
		Key = (destination[i] + Key) * C1 + C2;
		//在下一 BYTE 中,通过 C1、C2 修改所要使用的 KEY 
	}
	
	return TRUE;
}

//进行解密的函数
BOOL CCrypt::Decrypt (BYTE *source , BYTE *destination, DWORD length)
{
	DWORD i;
	BYTE PreviousBlock;
	INT Key = KEY;
	
	if(!source || !destination || length <= 0)
		return FALSE;
	
	for (i = 0; i <length; i++) //加密为 BYTE 单位
	{
		PreviousBlock  = source[i];
		destination[i] = source[i]^Key  >>  8;
		Key = (PreviousBlock + Key) * C1 + C2;
		//保存之前的块(Block) ,然后查看解密所使用的 KEY 
	}
	
	return TRUE;
}

测试代码

#include <stdio.h>
#include <tchar.h>
#include "Crypt.h"


int _tmain(int argc, _TCHAR* argv[])
{
	char a1[10] = "abcdefhig";
	char a2[10] = {0};
	char a3[10] = {0};

	printf("a1=%s\n", a1);
	CCrypt::Encrypt((BYTE *)a1, (BYTE *)a2, 10);
	printf("a2=%s\n", a2);

	CCrypt::Decrypt((BYTE *)a2, (BYTE *)a3, 10);
	printf("a3=%s\n", a3);

	return 0;
}

 下面简单了解一下源代码。
const INT C1 = 52845;
const INT C2 = 22719;
const INT KEY = 72957;
上面定义的 3 个变量都是为了进行 bit 运算而成为 KEY 的变量。
从上面的 Encrypt 函数可以了解到通过一般 bit 运算进行加密的方法,它的核心
逻辑就是将 KEY 修改为 1BYTE 单位的同时进行加密。 假定所有数据转换为每 BYTE
一样的 KEY, 进行 bit 运算, 这时只需要知道该 KEY 就可以很容易地解密了。 因此,
添加修改 KEY 的公式, 就是要防止非法获取 KEY 而解密。 下面通过 Decrypt 函数了
解一下这部分的解密。


ZZ:  网游服务器编程第3章

#ifndef TOMCRYPT_H_ #define TOMCRYPT_H_ #include <assert.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <ctype.h> #include <limits.h> /* use configuration data */ #include <tomcrypt_custom.h> #ifdef __cplusplus extern "C" { #endif /* version */ #define CRYPT 0x0116 #define SCRYPT "1.16" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 128 /* descriptor table size */ /* Dropbear change - this should be smaller, saves some size */ #define TAB_SIZE 4 /* error codes [will be expanded in future releases] */ enum { CRYPT_OK=0, /* Result OK */ CRYPT_ERROR, /* Generic Error */ CRYPT_NOP, /* Not a failure but no operation was performed */ CRYPT_INVALID_KEYSIZE, /* Invalid key size given */ CRYPT_INVALID_ROUNDS, /* Invalid number of rounds */ CRYPT_FAIL_TESTVECTOR, /* Algorithm failed test vectors */ CRYPT_BUFFER_OVERFLOW, /* Not enough space for output */ CRYPT_INVALID_PACKET, /* Invalid input packet given */ CRYPT_INVALID_PRNGSIZE, /* Invalid number of bits for a PRNG */ CRYPT_ERROR_READPRNG, /* Could not read enough from PRNG */ CRYPT_INVALID_CIPHER, /* Invalid cipher specified */ CRYPT_INVALID_HASH, /* Invalid hash specified */ CRYPT_INVALID_PRNG, /* Invalid PRNG specified */ CRYPT_MEM, /* Out of memory */ CRYPT_PK_TYPE_MISMATCH, /* Not equivalent types of PK keys */ CRYPT_PK_NOT_PRIVATE, /* Requires a private PK key */ CRYPT_INVALID_ARG, /* Generic invalid argument */ CRYPT_FILE_NOTFOUND, /* File Not Found */ CRYPT_PK_INVALID_TYPE, /* Invalid type of PK key */ CRYPT_PK_INVALID_SYSTEM,/* Invalid PK system specified */ CRYPT_PK_DUP, /* Duplicate key already in key ring */ CRYPT_PK_NOT_FOUND, /* Key not found in keyring */ CRYPT_PK_INVALID_SIZE, /* Invalid size input for PK parameters */ CRYPT_INVALID_PRIME_SIZE,/* Invalid size of prime requested */ CRYPT_PK_INVALID_PADDING /* Invalid padding on input */ }; #include <tomcrypt_cfg.h> #include <tomcrypt_macros.h> #include <tomcrypt_cipher.h> #include <tomcrypt_hash.h> #include <tomcrypt_mac.h> #include <tomcrypt_prng.h> #include <tomcrypt_pk.h> #include <tomcrypt_math.h> #include <tomcrypt_misc.h> #include <tomcrypt_argchk.h> #include <tomcrypt_pkcs.h> #ifdef __cplusplus } #endif #endif /* TOMCRYPT_H_ */ /* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt.h,v $ */ /* $Revision: 1.20 $ */ /* $Date: 2006/11/26 01:45:14 $ */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值