📄 aescrypt.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 + -