在Windows中使用带有NCrypt的AES CBC

时间:2017-01-06 18:03:02

标签: c++ cryptography cryptoapi cng

我试图使用NCrypt.dll加密一些数据,用C ++加密,而且我在处理密钥和算法方面遇到了麻烦。

我想将AES与CBC chainging方法一起使用,但是,无法使 NCryptEncrypt 功能起作用(我不断抛出无效的缓冲区大小)。

我使用 NCRYPT_AES_ALGORITHM 标志创建并存储了一个密钥(在密钥存储提供程序中),但是,不知道如何设置算法以使用CBC方法。

    secSt = NCryptCreatePersistedKey(phProvider, &keyHndl, NCRYPT_AES_ALGORITHM, keyname, 0, 0);

我尝试了一些属性设置而没有成功,我想知道NCrypt是否可以实现这一点?

我知道Bcrypt加密功能允许这样做并尝试将我的 NCRYPT_KEY_HANDLE 转换为 BCRYPT_KEY_HANDLE 但没有成功(所以我认为这是不可能的)。

1 个答案:

答案 0 :(得分:2)

您可以使用 private void handleMouseMoveEvent(object sender, MouseEventArgs args) { if (args.LeftButton == MouseButtonState.Pressed) { Point parentPosition = Mouse.GetPosition(parentCanvas); Canvas.SetLeft(this, (parentPosition.X - Width / 2)); Canvas.SetTop(this, (parentPosition.Y - Height / 2)); } args.Handled = true; } 和BCrypt常量NCryptSetProperty来应用链接模式CBC。

请注意,BCRYPT_CHAIN_MODE_CBC似乎不支持对称密钥的填充(请参阅NCryptEncrypt中参数NCryptEncrypt的说明)。所以我不得不应用一些穷人的明文填充来获得16个字节的倍数。没有填充,我也得到状态代码0xc0000206(STATUS_INVALID_BUFFER_SIZE)。

dwFlags