我正试图围绕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是纯文本。您可能需要查看代码中的缓冲区/流处理。