现在在做项目,需要使用Openssl的AES算法进行加密和解密。JAVA可以使用://KeyGenerator提供对称密钥生成器的功能,支持各种算法
KeyGenerator keygen = KeyGenerator.getInstance("AES");
//SecretKey负责保存对称密钥
SecretKey deskey = keygen.generateKey(); 这个自动生成密钥,但是VC使用Openssl该怎么做?
JAVA默认支持的是128bit 但是也可以通过安装一个SUN提供的工具生成192bit和256bit的KEY
请问用VC该怎么实现JAVA这样的自动密钥的生成?
在线急等!
KeyGenerator keygen = KeyGenerator.getInstance("AES");
//SecretKey负责保存对称密钥
SecretKey deskey = keygen.generateKey(); 这个自动生成密钥,但是VC使用Openssl该怎么做?
JAVA默认支持的是128bit 但是也可以通过安装一个SUN提供的工具生成192bit和256bit的KEY
请问用VC该怎么实现JAVA这样的自动密钥的生成?
在线急等!
{
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];
};
aes.cpp#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);
}
}
你说的自动生成的密钥是哪个函数?你的函数都需要除const int bits的其他的输入。能帮忙解释一下你那些函数的作用吗?
//KeyGenerator提供对称密钥生成器的功能,支持各种算法
KeyGenerator keygen = KeyGenerator.getInstance("AES");
//SecretKey负责保存对称密钥
SecretKey deskey = keygen.generateKey();
//打印密钥
string strkey;
BASE64Encoder base64E = new BASE64Encoder();
strkey = base64E.encode(deskey.getEncoded()); JAVA中的这段话用openssl中的AES和Base64该怎么实现?
BASE64Encoder base64E = new BASE64Encoder();
strkey = base64E.encode(deskey.getEncoded()); 这一段我懂该怎么做,但是前面生成deskey的这一段该怎么用C++和Openssl来实现?
KeyGenerator keygen = KeyGenerator.getInstance("AES");
//SecretKey负责保存对称密钥
SecretKey deskey = keygen.generateKey();