我试图使用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 但没有成功(所以我认为这是不可能的)。
答案 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