Я пока еще не эксперт в области шифрования! но сейчас я работаю с этим, чтобы почувствовать вашу боль ...
Что-то не так с битом шифрования
// ENCRYPT A (SHORT) TEST MESSAGE [SHOULD JUST BE ANOTHER ALG'S KEY LATER]:
DWORD encryptBufferLen=0;
CryptEncrypt(hKey, 0, true, 0, NULL, &encryptBufferLen, 0); // how much space?
BYTE* encryptionBuffer = (BYTE*)malloc(encryptBufferLen);
memcpy(encryptionBuffer, TestMessage, TestMessageLen); // move for in-place-encrypt
CryptEncrypt(hKey,0,true,0, encryptionBuffer, &bufferlen, encryptBufferLen );
Похоже, что вы просите функцию предоставить вам размер зашифрованного сообщения, чтобы вы могли назначить его память, т.е. размер ... НО вы ничего не передаете, кроме самого ключа, поэтому я не думаю, что это быть в состоянии дать эту информацию наверняка ..
У вас есть CryptEncrypt (hKey, 0, true, 0, NULL, & encryptBufferLen, 0); // но зачем "NULL", когда вам действительно нужно передать в буфер, содержащий строку для шифрования, чтобы он мог определить размер и вернуть его вам! Затем вы можете двигаться дальше с остальными. Я знаю, как работает бит экспорта (потому что вы работаете с ключами в этом контексте), тогда как здесь вы имеете дело с реальным сообщением. Попробуйте передать параметр и посмотрите, как это происходит?
Я думаю, вы обнаружите, что вы на самом деле не можете расшифровать оба ключа, поскольку вы еще ничего не зашифровали ???? Я думаю, что вы зашифровали сообщение в буфер нулевого размера.
Как я уже сказал, не эксперт, но для меня это выглядит неправильно ... Самое странное, что я нашел ваш пост на днях и собрал рабочие фрагменты, чтобы помочь мне понять его, поэтому я очень надеюсь, что эта информация поможет вам!