#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/aes.h>
int
main(
int
argc,
char
** argv) {
AES_KEY aes;
unsigned
char
key[AES_BLOCK_SIZE];
unsigned
char
iv[AES_BLOCK_SIZE];
unsigned
char
* input_string;
unsigned
char
* encrypt_string;
unsigned
char
* decrypt_string;
unsigned
int
len;
unsigned
int
i;
if
(argc != 2) {
fprintf
(stderr,
"%s <plain text>\n"
, argv[0]);
exit
(-1);
}
len = 0;
if
(
strlen
(argv[1])>=AES_BLOCK_SIZE ||
(
strlen
(argv[1]) + 1) % AES_BLOCK_SIZE == 0) {
len =
strlen
(argv[1]) + 1;
}
else
{
len = ((
strlen
(argv[1]) + 1) / AES_BLOCK_SIZE + 1) * AES_BLOCK_SIZE;
}
input_string = (unsigned
char
*)
calloc
(len,
sizeof
(unsigned
char
));
if
(input_string == NULL) {
fprintf
(stderr,
"Unable to allocate memory for input_string\n"
);
exit
(-1);
}
strncpy
((
char
*)input_string, argv[1],
strlen
(argv[1]));
memset
(key, 0x01, AES_BLOCK_SIZE);
memset
(iv, 0x01, AES_BLOCK_SIZE);
if
(AES_set_encrypt_key(key, 128, &aes) < 0) {
fprintf
(stderr,
"Unable to set encryption key in AES\n"
);
exit
(-1);
}
encrypt_string = (unsigned
char
*)
calloc
(len,
sizeof
(unsigned
char
));
if
(encrypt_string == NULL) {
fprintf
(stderr,
"Unable to allocate memory for encrypt_string\n"
);
exit
(-1);
}
AES_cbc_encrypt(input_string, encrypt_string, len, &aes, iv, AES_ENCRYPT);
decrypt_string = (unsigned
char
*)
calloc
(len,
sizeof
(unsigned
char
));
if
(decrypt_string == NULL) {
fprintf
(stderr,
"Unable to allocate memory for decrypt_string\n"
);
exit
(-1);
}
memset
(iv, 0x01, AES_BLOCK_SIZE);
if
(AES_set_decrypt_key(key, 128, &aes) < 0) {
fprintf
(stderr,
"Unable to set decryption key in AES\n"
);
exit
(-1);
}
AES_cbc_encrypt(encrypt_string, decrypt_string, len, &aes, iv,
AES_DECRYPT);
printf
(
"input_string =%s\n"
, input_string);
printf
(
"encrypted string ="
);
for
(i=0; i<len; ++i) {
printf
(
"%u "
, encrypt_string[i]);
}
printf
(
"\n"
);
printf
(
"decrypted string =%s\n"
, decrypt_string);
return
0;
}