It works. I think you just needed to initialize block_buffer.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mcrypt.h>
int main()
{
MCRYPT td, td2;
char * string = "My secret message";
int i;
char *key;
char *IV;
char * block_buffer;
int blocksize;
int keysize = 32;
FILE *myFile;
key = calloc(1, keysize);
strcpy(key, "This-is-my-key#########");
td = mcrypt_module_open("saferplus", NULL, "cbc", NULL);
td2 = mcrypt_module_open("saferplus", NULL, "cbc", NULL);
blocksize = mcrypt_enc_get_block_size(td);
block_buffer = calloc(1, blocksize);
IV = malloc(mcrypt_enc_get_iv_size(td));
if ((block_buffer == NULL) || (IV == NULL)) {
fprintf(stderr, "Failed to allocate memory\n");
exit(EXIT_FAILURE);
}
for (i = 0; i < mcrypt_enc_get_iv_size(td); i++) {
IV[i] = rand();
}
mcrypt_generic_init(td, key, keysize, IV);
mcrypt_generic_init(td2, key, keysize, IV);
strcpy(block_buffer, string);
printf("1: %s\n", block_buffer);
mcrypt_generic (td, block_buffer, blocksize);
myFile = fopen("encrypted","w");
if ((myFile == NULL) || (fwrite(block_buffer, blocksize, 1, myFile) != 1)) {
fprintf(stderr, "Failed to write data\n");
exit(EXIT_FAILURE);
}
fclose(myFile);
printf("2: %s\n", block_buffer);
myFile = fopen("encrypted","r");
if ((myFile == NULL) || (fread(block_buffer, blocksize, 1, myFile) != 1)) {
fprintf(stderr, "Failed to read data\n");
exit(EXIT_FAILURE);
}
fclose(myFile);
printf("2.5: %s\n", block_buffer);
mdecrypt_generic (td2, block_buffer, blocksize);
printf("3: %s\n", block_buffer);
mcrypt_generic_deinit (td);
mcrypt_generic_deinit(td2);
mcrypt_module_close(td);
mcrypt_module_close(td2);
return 0;
}
source
share