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

📄 aescrypt.cpp

📁 aes的原代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\aescrypt.h"
/**
 * AES 加密构造器
 * 参数:
 *  key 密钥,加密的IV与密钥相同
 *  keyLen 上述密钥长度
 */
AesCrypt::AesCrypt(unsigned char *key, int keyLen)
{
	this->key = new unsigned char[keyLen];
	memcpy(this->key,key,keyLen);
	//this->key = key;
	this->IV = new unsigned char[IV_LEN];
	memcpy(this->IV,key,IV_LEN);
	this->keyLen=keyLen;
	//this->IV = IV;
}
/**
 * AES 加密缓冲区
 * 参数:
 *  enbuf 待加密的缓冲区数据
 *  rebuf 加密后数据存放的缓冲区
 *  len 待加密的缓冲区的字节长度
 */
int AesCrypt::rijEncrypt(unsigned char *enbuf,unsigned char *rebuf, int len)
{
	int offset,n,i,lastn;
	unsigned char buff[16];
	unsigned char *tp = rebuf;
	unsigned char *buffer = enbuf;
	lastn=len%16;
	aes_set_key( &aesCCtx, this->key, keyLen);
	memcpy(tmpIV, IV, IV_LEN);		//备份IV
	for( offset = 0; offset < len; offset += 16,buffer+=16)    {
		n =( len - offset > 16 ) ? 16 : ( len - offset );
		memcpy(buff,buffer,n);
		if(n<16) buff[15] = 16-(unsigned char)(n);
		for(i=0; i<16; i++)			buff[i] ^= tmpIV[i];
		aes_encrypt(&aesCCtx, buff, buff);
		memcpy( tp, buff, 16);
	}
	if(!lastn)
	{
		buff[15] = 0x10;		for( i = 0; i < 16; i++ )			buff[i]^= tmpIV[i];		aes_encrypt(&aesCCtx, buff, buff);
		memcpy( tp, buff, 16);
	}
	return 0;
}
/**
 * AES 加密缓冲区的静态方法,方便调用,比类的动态方法多了key的参数
 * 参数:
 *  enbuf 待加密的缓冲区数据
 *  rebuf 加密后数据存放的缓冲区
 *  key 加密密钥
 *  待加密的缓冲区的字节长度
 */
int AesCrypt::rijCrypt(unsigned char *enbuf,unsigned char *rebuf, unsigned char *key, int len)
{
	int offset,n,i,lastn;
	unsigned char buff[16];
	unsigned char tmpIV[IV_LEN];
	unsigned char *tp = rebuf;
	unsigned char *buffer = enbuf;
	aes_context aesCtx;
	aes_set_key( &aesCtx, key, 128);
	lastn=len%16;
	memcpy(tmpIV, key, IV_LEN);		//备份IV
	for( offset = 0; offset < len; offset += 16,buffer+=16)    {
		n =( len - offset > 16 ) ? 16 : ( len - offset );
		memcpy(buff,buffer,n);
		if(n<16) buff[15] = 16-(unsigned char)(n);
		for(i=0; i<16; i++)			buff[i] ^= tmpIV[i];
		aes_encrypt(&aesCtx, buff, buff);
		memcpy( tp, buff, 16);
		//tp+=16;
	}
	/*if(!lastn)
	{
		buff[15] = 0x10;		for( i = 0; i < 16; i++ )			buff[i]^= tmpIV[i];		aes_encrypt(&aesCtx, buff, buff);
		memcpy( tp, buff, 16);
	}*/
	return 0;
}
AesCrypt::~AesCrypt(void)
{
	delete[] key;
	delete[] IV;
}

⌨️ 快捷键说明

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