0
我有一個問題,當我使用http://slproweb.com/products/Win32OpenSSL.html,我嘗試初始化加密,但總是捉像OpenSSL的錯誤「斷言失敗」
錯誤「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);
}
感謝:使用上面這個功能
代碼!
哪個調用給出錯誤? – stark
我更新了第一篇文章(「//錯誤在這裏」)。如果(!EVP_EncryptUpdate(&ctx,out,&buflen,(unsigned char *)in,strlen(in))) – Roman