Acayıp garip bır sorun ile karsı karsıyayım,
Öncelikle Aes 128 ECB padding ile birlikler codlama encodlama yapmak için günlerdir uğrastım.
ve son günlerde elime C++ ile yapılmıs bir exe tool örnek buldum ki source kodu da var (tabii tam değil includeları tam verilmemiş)
Bu örnek Bir Dll ile link içinde dosyaya yazdıgnız texti başarılı sekilde encode decode ediyor.
(libgcrypt.dll) bu arkadasların guzel bır sıtesı de var ve oradadn da yardım aldımmmmm.
simdi c++ da
Kod: Tümünü seç
int encrypt( unsigned char * outbuf, int outlen, const unsigned char * plain, int plainlen, const char *ciphername )
{
int rc;
gcry_error_t err;
gcry_cipher_hd_t hd;
int cipher=GCRY_CIPHER_DES;
int keylength=16;
char *lkey;
char des_key[9], aes_key[17];
unsigned char iv[33];
MLOG( DEBUG_LOGLVL) "lh_aes_ecb_encrypt( %p, %p, %d)", outbuf, plain, plainlen );
if (m_IsLoaded == 0)
{
rc = loadfuncs();
MLOG(INFO_LOGLVL) "loadfuncs rc=%d", rc );
if (rc != 1) return EC_GCRYPT_LOAD_ERROR;
}
if (stricmp (ciphername, AES_STANDARD_NAME)==0) {
cipher=GCRY_CIPHER_AES;
keylength=16;
lkey=aes_key;
} else if (stricmp(ciphername, DES_STANDARD_NAME)==0) {
cipher=GCRY_CIPHER_DES;
keylength=8;
lkey=des_key;
}
memset (lkey,0,keylength+1);
memcpy(lkey,aeskey,keylength);
memset( iv, 0x00, 33 );
err = fgcry_cipher_open( &hd, cipher, GCRY_CIPHER_MODE_ECB, 0 );
if (err)
{
MLOG( ERROR_LOGLVL ) "Failed opening AES cipher: %s", Mfgcry_strerror(err));
return EC_ENCRYPT_DECRYPT;
}
err = fgcry_cipher_setkey( hd, lkey, keylength );
if (err)
{
MLOG(ERROR_LOGLVL) "Failed setkey: %s", Mfgcry_strerror(err));
return EC_ENCRYPT_DECRYPT;
}
err = fgcry_cipher_setiv( hd, iv, keylength );
if (err)
{
MLOG(ERROR_LOGLVL) "Failed setiv: %s", Mfgcry_strerror(err));
return EC_ENCRYPT_DECRYPT;
}
err = fgcry_cipher_encrypt( hd, outbuf, outlen, plain, plainlen );
if (err)
{
MLOG(ERROR_LOGLVL) "Failed encrypt: %s %d ", Mfgcry_strerror(err), err);
return EC_ENCRYPT_DECRYPT;
}
fgcry_cipher_close( hd );
return EC_SUCCESS;
}
burada bulunan memset yerine fillchar memcpy yerine de copymemory gibi fonsiyonlar kullanmaya baslayınca aa bir baktım benim diger string veya pchar gibi pointerlerin verileri sıfırlanıyor.
yazıgım kodlar pazaryerine dondu yazboz yapmaktan ama sorunu bulamadım
son haliyle rezil olmuş delphi kodumu da vereyim eminim dalga gecersiniz ama lütfen su fillchar kullanmadan c nin memset ve memcpy gibi fonksiyonunu kullanma sansım varmı? veya ben acayıp bir yanlıs yapıyorumda artık kor oldum goremıyormuyum
eğer vakti olupta bakabilecek ve bır fıkır verebilecek arkadaslara simdiden tesekkur ederim
(pointer değiskenlerin cogunu denedim son c deki benzeri olarak pchar kullandım ama program bu haliyle dogru sonuc vermiyor )
bu da dll dosyaları