CAPI AES:为什么 CryptSetKeyParam returns NTE_BAD_DATA (0x80090005)
CAPI AES: Why does CryptSetKeyParam returns NTE_BAD_DATA (0x80090005)
我正在尝试 encrypt/decrypt 使用带零填充的 AES 128 位数据。如果我不尝试使用填充模式(默认为 PKCS5_PADDING),我可以 encrypt/decrypt 很好,所以下面的代码片段是为了显示出现问题的地方:
// sanity check -- is key configured how I expect?
CryptGetKeyParam(hKey, KP_KEYLEN, temp, &tempSz, 0);
CryptGetKeyParam(hKey, KP_ALGID, temp, &tempSz, 0);
CryptGetKeyParam(hKey, KP_MODE, temp, &tempSz, 0);
CryptGetKeyParam(hKey, KP_PADDING, temp, &tempSz, 0);
// force padding to zero padding
DWORD padding = ZERO_PADDING;
CryptSetKeyParam(hKey, KP_PADDING, (PBYTE)&padding, 0);
每个查询的运行都没有问题:128、0x0000660e (CALG_AES_128)、1 (CRYPT_MODE_CBC) 和 1 (PKCS5_PADDING) -- 这是默认状态.
然后我尝试将填充设置为 ZERO_PADDING (3) 并将函数设置为 returns FALSE,最后一个错误为 NTE_BAD_DATA。为了咯咯笑,我尝试将其设置为 PKCS5_PADDING——没有错误。 RANDOM_PADDING: 错误。
尽我所能搜索互联网,我找不到任何文档来说明为什么更改填充会失败(甚至没有说明某些关键算法只允许 PKCS5_PADDING 的注释)。
有人有什么建议吗?
微软提供的加密服务提供者只支持PKCS5_PADDING
。
参考https://msdn.microsoft.com/en-us/library/windows/desktop/aa380272(v=vs.85).aspx;搜索 KP_PADDING
.
我正在尝试 encrypt/decrypt 使用带零填充的 AES 128 位数据。如果我不尝试使用填充模式(默认为 PKCS5_PADDING),我可以 encrypt/decrypt 很好,所以下面的代码片段是为了显示出现问题的地方:
// sanity check -- is key configured how I expect?
CryptGetKeyParam(hKey, KP_KEYLEN, temp, &tempSz, 0);
CryptGetKeyParam(hKey, KP_ALGID, temp, &tempSz, 0);
CryptGetKeyParam(hKey, KP_MODE, temp, &tempSz, 0);
CryptGetKeyParam(hKey, KP_PADDING, temp, &tempSz, 0);
// force padding to zero padding
DWORD padding = ZERO_PADDING;
CryptSetKeyParam(hKey, KP_PADDING, (PBYTE)&padding, 0);
每个查询的运行都没有问题:128、0x0000660e (CALG_AES_128)、1 (CRYPT_MODE_CBC) 和 1 (PKCS5_PADDING) -- 这是默认状态.
然后我尝试将填充设置为 ZERO_PADDING (3) 并将函数设置为 returns FALSE,最后一个错误为 NTE_BAD_DATA。为了咯咯笑,我尝试将其设置为 PKCS5_PADDING——没有错误。 RANDOM_PADDING: 错误。
尽我所能搜索互联网,我找不到任何文档来说明为什么更改填充会失败(甚至没有说明某些关键算法只允许 PKCS5_PADDING 的注释)。
有人有什么建议吗?
微软提供的加密服务提供者只支持PKCS5_PADDING
。
参考https://msdn.microsoft.com/en-us/library/windows/desktop/aa380272(v=vs.85).aspx;搜索 KP_PADDING
.