19,472
社区成员




//KeyGenerator提供对称密钥生成器的功能,支持各种算法
KeyGenerator keygen = KeyGenerator.getInstance("AES");
//SecretKey负责保存对称密钥
SecretKey deskey = keygen.generateKey();
//KeyGenerator提供对称密钥生成器的功能,支持各种算法
KeyGenerator keygen = KeyGenerator.getInstance("AES");
//SecretKey负责保存对称密钥
SecretKey deskey = keygen.generateKey();
//KeyGenerator提供对称密钥生成器的功能,支持各种算法
KeyGenerator keygen = KeyGenerator.getInstance("AES");
//SecretKey负责保存对称密钥
SecretKey deskey = keygen.generateKey();
//打印密钥
string strkey;
BASE64Encoder base64E = new BASE64Encoder();
strkey = base64E.encode(deskey.getEncoded());
#pragma once
#include "OpenSSL/aes.h"
//wrapper class for AES encryption
class CAES
{
public:
CAES(void);
~CAES(void);
void Decrypt(const unsigned char *in, int length, unsigned char *out);
void Encrypt(const unsigned char *in, int length, unsigned char *out);
int SetDecryptKey(const unsigned char *userKey, const int bits);
int SetEncryptKey(const unsigned char *userKey, const int bits);
protected:
void CryptData(const unsigned char *in, unsigned char *out, int length, const int enc);
protected:
AES_KEY m_aesEncKey;
AES_KEY m_aesDecKey;
public:
unsigned char m_userDecKey[128];
unsigned char m_userEncKey[128];
};
#include "aes.h"
CAES::CAES(void)
{
}
CAES::~CAES(void)
{
}
void CAES::Decrypt(const unsigned char *in, int length, unsigned char *out)
{
CryptData(in, out, length, AES_DECRYPT);
}
void CAES::Encrypt(const unsigned char *in, int length, unsigned char *out)
{
CryptData(in, out, length, AES_ENCRYPT);
}
int CAES::SetDecryptKey(const unsigned char *userKey, const int bits)
{
//return AES_set_decrypt_key(userKey, bits, &m_aesDecKey);
memcpy(m_userDecKey, userKey, bits);
return 0;
}
int CAES::SetEncryptKey(const unsigned char *userKey, const int bits)
{
//return AES_set_encrypt_key(userKey, bits, &m_aesEncKey);
memcpy(m_userEncKey, userKey, bits);
return 0;
}
void CAES::CryptData(const unsigned char *in, unsigned char *out, int length, const int enc)
{
AES_KEY aesKey;
if (AES_ENCRYPT == enc)
AES_set_encrypt_key(m_userEncKey, 128, &aesKey);
else
AES_set_decrypt_key(m_userDecKey, 128, &aesKey);
unsigned long len = length;
unsigned char tmp[AES_BLOCK_SIZE];
while (len >= AES_BLOCK_SIZE)
{
memset(tmp,0,AES_BLOCK_SIZE);
memcpy(tmp,in,AES_BLOCK_SIZE);
if (AES_ENCRYPT == enc)
{
AES_encrypt(tmp, out, &aesKey);
}
else
{
AES_decrypt(tmp, out, &aesKey);
}
len -= AES_BLOCK_SIZE;
in += AES_BLOCK_SIZE;
out += AES_BLOCK_SIZE;
}
if (len)
{
memset(tmp,0,AES_BLOCK_SIZE);
memcpy(tmp,in,AES_BLOCK_SIZE);
if (AES_ENCRYPT == enc)
{
AES_encrypt(tmp, tmp, &aesKey);
}
else
{
AES_decrypt(tmp, tmp, &aesKey);
}
memcpy(out, tmp, AES_BLOCK_SIZE);
}
}
http://www.mathmagic.cn/bbs/read.php?tid=10054