Microsoft CNG BCryptEncrypt返回密文==明文



我正试图围绕CNG的AES实现一个AES-OFB包装器,用于对称加密。

我遇到了一个我无法理解的问题。。。我已经创建了一个AES算法句柄(BCRYPT_AES_algorithm),并导入了AES密钥。然后,我尝试生成一个16字节的密钥流,用于对我的明文/密文进行异或运算。第一次运行此机制时,keyStreamPtr从某个随机字节流更改为另一个,然而,第三次执行此操作时(第三组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实现。。。也许我做错了什么?

我唯一能想到的就是再次加密密钥流。如果这样做,您可以有效地执行加密/解密:P XOR C XOR C=P,其中C是密钥流,P是纯文本。您可能需要查看代码中的缓冲区/流处理。

最新更新