~~NOTOC~~
====== DES encryption with OpenSSL: example in C ======
This is a simple example that shows how to encrypt and decrypt data using the DES implementation provided by OpenSSL.
===== Encrypt/Decrypt functions =====
We will define two functions, //Encrypt// and //Decrypt//. They both use the function //DES_cfb64_encrypt// to encrypt and decrypt data.
See comments inline for explanations.
#include
#include
#include
#include
char *
Encrypt( char *Key, char *Msg, int size)
{
static char* Res;
int n=0;
DES_cblock Key2;
DES_key_schedule schedule;
Res = ( char * ) malloc( size );
/* Prepare the key for use with DES_cfb64_encrypt */
memcpy( Key2, Key,8);
DES_set_odd_parity( &Key2 );
DES_set_key_checked( &Key2, &schedule );
/* Encryption occurs here */
DES_cfb64_encrypt( ( unsigned char * ) Msg, ( unsigned char * ) Res,
size, &schedule, &Key2, &n, DES_ENCRYPT );
return (Res);
}
char *
Decrypt( char *Key, char *Msg, int size)
{
static char* Res;
int n=0;
DES_cblock Key2;
DES_key_schedule schedule;
Res = ( char * ) malloc( size );
/* Prepare the key for use with DES_cfb64_encrypt */
memcpy( Key2, Key,8);
DES_set_odd_parity( &Key2 );
DES_set_key_checked( &Key2, &schedule );
/* Decryption occurs here */
DES_cfb64_encrypt( ( unsigned char * ) Msg, ( unsigned char * ) Res,
size, &schedule, &Key2, &n, DES_DECRYPT );
return (Res);
}
//Note that the functions above assume a key of 8 characters. If a longer key is provided, only the first 8 bytes will be used. To support longer keys, additional processing and concatenation work must be done to prepare key2.//
===== Example =====
For testing purpose, this is a main function that calls the Encrypt and Decrypt functions shown above.
int main() {
char key[]="password";
char clear[]="This is a secret message";
char *decrypted;
char *encrypted;
encrypted=malloc(sizeof(clear));
decrypted=malloc(sizeof(clear));
printf("Clear text\t : %s \n",clear);
memcpy(encrypted,Encrypt(key,clear,sizeof(clear)), sizeof(clear));
printf("Encrypted text\t : %s \n",encrypted);
memcpy(decrypted,Decrypt(key,encrypted,sizeof(clear)), sizeof(clear));
printf("Decrypted text\t : %s \n",decrypted);
return (0);
}
\\
To compile this code, copy the three functions //Encrypt//, //Decrypt// and //main// in a file (e.g. test.c), then compile as follows
gcc test.c -o test -lssl
The //-lssl// flag allows the code to be linked against the OpenSSL library.
If you don't have the OpenSSL library, you can install it using apt
sudo apt-get install libssl-dev
Once the program compiled, you can test it
$./test
Clear text : This is a secret message
Enecrypted text : 8��0t�E�E� \@�Z9T�)��a�
Decrypted text : This is a secret message
\\
{{tag>coding security howto}}