Autor Wątek: AES  (Przeczytany 1281 razy)

0 Użytkowników i 1 Gość przegląda ten wątek.

Offline mucha

  • Senior Developer
  • Młodzież
  • *
AES
« dnia: Marzec 04, 2012, 14:21:12 pm »
Chce użyć AES z 256 bitowym kluczem, tryb CBC z wtwCrypto.h. Robię tak:
wtwAESKeyInfo info;
info.keySize = 256;
info.key = key; // BYTE[32]
info.flags = WTW_CRYPTO_AES_KEY_FLAG_ENCRYPTION | WTW_CRYPTO_AES_KEY_FLAG_DECRYPTION;
wtwKey = reinterpret_cast<void*>(wtw->fnCall(WTW_CRYPTO_AES_EXPAND_KEY, reinterpret_cast<WTW_PARAM>(&info), 0));
wtwKey chyba tworzy się poprawnie (zwraca wartość różną od NULL). Dalej (msg - szyfrowana wiadomość):
wtwCryptoData data;

data.nData = len<<1; // len = wcslen(msg)
while(data.nData % 16 != 0) data.nData++; // padding to 16 bytes (todo: improve)
data.pData = malloc(data.nData);
memset((void*)data.pData, 0, data.nData);
memcpy((void*)data.pData, msg, len<<1);

data.expandedKey = wtwKey;
data.ivec = (void*)iv; // BYTE[16]
data.flags = WTW_CRYPTO_AES_FLAG_MODE_CBC;

HRESULT res = wtw->fnCall(WTW_CRYPTO_AES_ENCRYPT, reinterpret_cast<WTW_PARAM>(&data), 0);
No i tutaj w res dostaje E_INVALIDARG, co robię źle? (ostatnia nightly, ostatnie API).

Edit: Dzięki, po poprawce wszystko działa :)
« Ostatnia zmiana: Marzec 05, 2012, 07:45:11 am wysłana przez mucha »

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Odp: AES
« Odpowiedź #1 dnia: Marzec 04, 2012, 15:47:55 pm »
Akurat klucza AES nie może byc używany i do szyfrowania i odszyfrowywania, w zasadzie musisz mieć do każdego celu inny "expanded key";

A tak poza tym, błąd w komunikatorze, gdzies zgubiłem "!" przy sprawdzaniu parametrów, następna nightly poprawi ;P