我正在尝试围绕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的实现...也许我做错了什么?
答案 0 :(得分:0)
我唯一能想到的是你再次加密密钥流。如果你这样做,你有效地执行加密/解密:P XOR C XOR C = P其中C是密钥流,P是纯文本。您可能希望查看代码中的缓冲区/流处理。