#include #include int main(int argc, char *argv[]) { EVP_CIPHER_CTX ctx; char key[EVP_MAX_KEY_LENGTH]; char iv[EVP_MAX_IV_LENGTH]; char *ct, *out; char final[EVP_MAX_BLOCK_LENGTH]; char str[] = "123456789abcdef"; int i; strcpy(key,"secret"); strcpy(iv,"foo"); ct = malloc(EVP_MAX_BLOCK_LENGTH); out = malloc(EVP_MAX_BLOCK_LENGTH); EVP_EncryptInit(&ctx, EVP_bf_cbc(), key, iv); EVP_EncryptUpdate(&ctx, ct, &i, str, strlen(str)); printf("Ciphertext is %d bytes.\n",i); printf("Ciphertext is >>%s<<\n",ct); EVP_DecryptInit(&ctx, EVP_bf_cbc(), key, iv); EVP_DecryptUpdate(&ctx, out, &i, ct, i); printf("Decrypted: >>%s<<\n",out); EVP_DecryptUpdate(&ctx, out, &i, ct, i); printf("Decrypted: >>%s<<\n",out); if (!EVP_DecryptFinal(&ctx, final, &i)) err(-1,"padding incorrect"); final[i] = 0; printf("Decrypted: >>%s<<\n",final); exit(0); }