I modified the code with using strlen(Plaintext) which is 16-byte long, but still not understand if need to call EVP_EncryptFinal_ex() after called EVP_EncryptUpdate().
If I call like this, I get 32-byte return(The first 16 byte string equal to Ciphertext in the test case) ret = EVP_EncryptUpdate(&ctx, out, outl, in, inl); if(!ret) abort(); len += *outl; ret = EVP_EncryptFinal_ex(&ctx, out+len, outl); if(!ret) abort(); len += *outl; Or if I call like this, the result is error (return 16 byte, but not equal to Ciphertext in the test case) ret = EVP_EncryptUpdate(&ctx, out, outl, in, inl); if(!ret) abort(); ret = EVP_EncryptFinal_ex(&ctx, out, outl); if(!ret) abort(); len += *outl; Bian > char Plaintext[]="Single block msg"; This is a 17-byte string. > out = EncryptTest((unsigned char*)Plaintext, > sizeof(Plaintext), key,iv, &outl); sizeof(Plaintext) == 17 DS ___________________________________________________________ 天生购物狂,狂抢购物券,你还等什么! http://cn.mail.yahoo.com/promo/taobao20/index.php