encryption - Microsoft CNG BCryptEncrypt 返回密文 == 明

我正在尝试围绕 CNG 的 AES 实现 AES-OFB 包装器以进行对称加密。

我遇到了一个我无法理解的问题...我创建了一个 AES 算法句柄 (BCRYPT_AES_ALGORITHM) 并导入了一个 AES key 。然后,我尝试生成一个 16 字节的 key 流,用于对我的明文/密文进行异或运算。我第一次运行此机制时,keyStreamPtr 从一些随机字节流更改为另一个随机字节流,但是,我第 3 次这样做(第 3 组 16 字节 key 流),我开始获得相同的输出并且它永远发生。

            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 实现的……也许我做错了什么?

最佳答案

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

关于encryption - Microsoft CNG BCryptEncrypt 返回密文 == 明文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9460934/

相关文章:

imagemagick - 使用 rmagick 调整 png 图像的大小而不会降低质量

eclipse - 为什么 Maven 不能在 Eclipse Indigo 中工作?

git - 克隆存储库时写入错误

symfony - 如何覆盖供应商捆绑配置?

javascript - Javascript 中的网络流量

c# - 从任务计划程序运行时,Windows 服务器上的预定 C# 控制台应用程序不显示控制台

google-app-engine - gae 运行时 MCycles

.net - 如何从 .NET 调用 Oracle 表函数(流水线函数)

sql - 假阴性 : Job Step History

macos - OSX 信号量 : Invalid argument in sem_open