3

我正在尝试围绕 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 实现的……也许我做错了什么?

4

1 回答 1

0

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

于 2012-05-08T07:58:16.533 回答