【发布时间】:2013-01-12 00:19:01
【问题描述】:
我有一个问题,当我使用 http://slproweb.com/products/Win32OpenSSL.html 时,我尝试初始化加密,但总是捕获像
这样的错误“OpenSSL 断言失败,evp_enc.c(282)”
有人可以帮我解决这个问题吗?
我的代码:
bool do_encrypt(const char *in, unsigned char *out, int *outlen, unsigned char *key, unsigned char *iv)
{
int buflen, tmplen;
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
EVP_EncryptInit_ex(&ctx, EVP_rc4(), NULL, key, iv);
if(!EVP_EncryptUpdate(&ctx, out, &buflen, (unsigned char*)in, strlen(in))) // error here
{
return false;
}
if(!EVP_EncryptFinal_ex(&ctx, out + buflen, &tmplen))
{
return false;
}
buflen += tmplen;
*outlen = buflen;
EVP_CIPHER_CTX_cleanup(&ctx);
return true;
}
我使用 key 进行测试 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},iv 为 NULL。
上面使用这个函数的代码:
int WINAPI OwnSend(SOCKET s, const char FAR *buff, int len, int flags )
{
if(s == ServerSocket)
{
if(len > 0)
{
int outlen;
unsigned char EncryptBuffer[5500];
do_encrypt(buff, EncryptBuffer, &outlen, KeyTest, NULL);
buff = (const char *) EncryptBuffer;
return pTrampolineSend(s, buff, outlen, flags);
}
}
return pTrampolineSend(s, buff, len, flags);
}
谢谢!
【问题讨论】:
-
哪个调用给出了错误?
-
我更新了第一篇文章("//error here")。
if(!EVP_EncryptUpdate(&ctx, out, &buflen, (unsigned char*)in, strlen(in)))
标签: c++ encryption openssl