Hallo,
ich suche nach einem einfachen Beispiel, wie mit der Library mcrypt in C / C++ ein String verschlüsselt und dann wieder entschlüsselt werden kann. Ich bekomme das irgendwie nicht hin.
In PHP ist das ja recht einfach, wie es unten aufgeführt ist. In C / C++ bekomme ich das aber nicht hin.
Beide Programme habe ich mal unten beigefügt.
Was mache ich verkehrt. Ich hoffe mir kann geholfen werden 😉
Danke schon mal im Voraus.
Gruß
Markus
<?php $td = mcrypt_module_open('rijndael-256', '', 'ofb', ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM); $ks = mcrypt_enc_get_key_size($td); $key = substr(md5('very secret key'), 0, $ks); mcrypt_generic_init($td, $key, $iv); $encrypted = mcrypt_generic($td, 'This is very important data'); mcrypt_generic_deinit($td); mcrypt_generic_init($td, $key, $iv); $decrypted = mdecrypt_generic($td, $encrypted); mcrypt_generic_deinit($td); mcrypt_module_close($td); echo trim($encrypted); echo trim($decrypted); ?>
// g++ -o main main.c -lmcrypt #include <mcrypt.h> #include <iostream> #include <fstream> #include <string> using namespace std; MCRYPT td; char *key; char block_buffer; char *IV; int blocksize=1; int keysize=4; int buffer_size = 20; char buffer[20]; const char* password = "abcd"; void decrypt_buffer() { int x=0; for(x=0;x<buffer_size;x++) { mdecrypt_generic(td,&buffer[x],1); } } void encrypt_buffer() { int x; for(x=0;x<buffer_size;x++) { mcrypt_generic(td,&buffer[x],1); } } int encrypt_init() { int i; int iv_size; td=mcrypt_module_open((char*)MCRYPT_RIJNDAEL_256,NULL,(char*)"cfb",NULL); iv_size=mcrypt_enc_get_iv_size(td); IV=(char *)malloc(iv_size); srand(time(NULL)); for(i=0;i<iv_size;i++) IV[i]=rand(); keysize=mcrypt_enc_get_key_size(td); key=(char *)malloc(keysize); bzero(key,keysize); if(keysize<strlen(password)) strncpy(key,password,keysize); else strncpy(key,password,strlen(password)); mcrypt_generic_init(td,key,keysize,IV); return 0; } int main(int argc, char *argv[]) { encrypt_init(); buffer[0] = 'H'; buffer[1] = 'a'; buffer[2] = 'l'; buffer[3] = 'l'; buffer[4] = 'o'; cout << buffer << endl; encrypt_buffer(); cout << buffer << endl; decrypt_buffer(); cout << buffer << endl; return 0; }