Microsoft CNG BCryptEncrypt возвращает зашифрованный текст == открытый текст - PullRequest
2 голосов
/ 27 февраля 2012

Я пытаюсь реализовать оболочку AES-OFB вокруг AES CNG для симметричного шифрования.

Я столкнулся с проблемой, которую не могу понять ... Я создал дескриптор алгоритма AES (BCRYPT_AES_ALGORITHM) и импортировал ключ AES. Затем я пытаюсь сгенерировать 16-байтовый поток ключей для использования с XORing моего открытого / зашифрованного текста. В первый раз, когда я запускаю этот механизм, keyStreamPtr изменяется с некоторого случайного потока байтов на другой, однако, в 3-й раз, когда я делаю это (3-й набор из 16 байтов ключевого потока), я начинаю получать один и тот же вывод, и это происходит вечно.

            status = BCryptEncrypt((BCRYPT_KEY_HANDLE)keyHandle, 
                                   keyStreamPtr,   
                                   keyStreamLength,
                                   NULL, //no padding
                                   NULL, // no IV
                                   0,  // no IV
                                   keyStreamPtr,   
                                   keyStreamLength,
                                   &Length, 
                                   0); // no option flags

Кто-нибудь видел что-нибудь подобное? почему AES будет возвращать зашифрованный текст, полностью идентичный открытому тексту, который был введен? Опять же, это для реализации AES-OFB ... Возможно, я делаю что-то не так?

1 Ответ

0 голосов
/ 08 мая 2012

Единственное, о чем я могу думать, это то, что вы снова шифруете поток ключей.Если вы сделаете это, вы эффективно выполните шифрование / дешифрование: P XOR C XOR C = P, где C - поток ключей, а P - простой текст.Возможно, вы захотите взглянуть на обработку буфера / потока в вашем коде.

...