| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| /* |
| * MCrypt API available online: |
| * http://linux.die.net/man/3/mcrypt |
| */ |
| #include <mcrypt.h> |
| #include <math.h> |
| #include <stdint.h> |
| #include <stdlib.h> |
| int encrypt( |
| void* buffer, |
| int buffer_len, /* Because the plaintext could include null bytes*/ |
| char* IV, |
| char* key, |
| int key_len |
| ){ |
| MCRYPT td = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL); |
| int blocksize = mcrypt_enc_get_block_size(td); |
| if( buffer_len % blocksize != 0 ){return 1;} |
| mcrypt_generic_init(td, key, key_len, IV); |
| mcrypt_generic(td, buffer, buffer_len); |
| mcrypt_generic_deinit (td); |
| mcrypt_module_close(td); |
| return 0; |
| } |
| int decrypt( |
| void* buffer, |
| int buffer_len, |
| char* IV, |
| char* key, |
| int key_len |
| ){ |
| MCRYPT td = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL); |
| int blocksize = mcrypt_enc_get_block_size(td); |
| if( buffer_len % blocksize != 0 ){return 1;} |
| mcrypt_generic_init(td, key, key_len, IV); |
| mdecrypt_generic(td, buffer, buffer_len); |
| mcrypt_generic_deinit (td); |
| mcrypt_module_close(td); |
| return 0; |
| } |
| void display(char* ciphertext, int len){ |
| int v; |
| for (v=0; v<len; v++){ |
| printf("%d ", ciphertext[v]); |
| } |
| printf("\n"); |
| } |
| int main() |
| { |
| MCRYPT td, td2; |
| char * plaintext = "test text 123"; |
| char* IV = "AAAAAAAAAAAAAAAA"; |
| char *key = "0123456789abcdef"; |
| int keysize = 16; /* 128 bits */ |
| char* buffer; |
| int buffer_len = 16; |
| buffer = calloc(1, buffer_len); |
| strncpy(buffer, plaintext, buffer_len); |
| printf("==C==\n"); |
| printf("plain: %s\n", plaintext); |
| encrypt(buffer, buffer_len, IV, key, keysize); |
| printf("cipher: "); display(buffer , buffer_len); |
| decrypt(buffer, buffer_len, IV, key, keysize); |
| printf("decrypt: %s\n", buffer); |
| return 0; |
No comments:
Post a Comment