首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DPAPI NCryptProtectSecret返回NTE_ENCRYPTION_FAILURE

DPAPI NCryptProtectSecret返回NTE_ENCRYPTION_FAILURE
EN

Stack Overflow用户
提问于 2016-10-22 12:16:41
回答 4查看 1.1K关注 0票数 3

我试图使用DPAPI加密数据,但是它在执行NCryptProtectSecret时失败了,它返回:

0x80090034 (NTE_ENCRYPTION_FAILURE)

我用本地用户SID创建了NCryptCreateProtectionDescriptor

代码语言:javascript
复制
"SID=S-1-5-21-2942599413-360359348-3087651068-500"

然后,我使用这个描述符实例作为NCryptProtectSecret的输入,但是它不起作用。

如果我使用保护描述符:

代码语言:javascript
复制
"LOCAL=user"

一切看起来都不错,但是它不适用于用户或组的SID。我已经在WindowsServer2012R2和Windows 2016上测试了这一点。

有什么想法吗?

下面是一个代码示例:

代码语言:javascript
复制
SECURITY_STATUS Status;
PBYTE       ProtectedData = NULL;
ULONG       ProtectedDataLength = 0;
NCRYPT_DESCRIPTOR_HANDLE    DescriptorHandle = NULL;
LPCWSTR ProtectionDescString = L"SID=S-1-5-21-2942599413-360359348-3087651068-500";

Status = NCryptCreateProtectionDescriptor(
                                        ProtectionDescString,
                                        0,
                                        &DescriptorHandle
                                        );      
// Status is ERROR_SUCCESS (zero)


LPCWSTR SecretString = L"Some message to protect";
PBYTE Secret = (PBYTE)SecretString;
DWORD SecretLength = (ULONG)( (wcslen(SecretString)+1)*sizeof(WCHAR) );

Status = NCryptProtectSecret(
                        DescriptorHandle,
                        0,
                        PlainText,
                        PlainTextLength,
                        NULL, // Use default allocations by LocalAlloc/LocalFree
                        NULL, // Use default parent windows handle.
                        &ProtectedData,  // out LocalFree
                        &ProtectedDataLength
                        );

**// Status == NTE_ENCRYPTION_FAILURE**
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-18 22:06:27

我遇到了这个问题,发现原因是我们的域运行在一个功能级别上,低于2012年。在将域名升级到2012年之后,问题得到了解决。

确定功能级别的一种快速简便的方法是下面的PowerShell cmdlet

代码语言:javascript
复制
[system.directoryservices.activedirectory.Forest]::GetCurrentForest().ForestMode
票数 2
EN

Stack Overflow用户

发布于 2016-12-27 13:29:18

将PlainText和PlainTextLength替换为PlainTextLength和SecretLength。

票数 1
EN

Stack Overflow用户

发布于 2017-04-05 13:46:42

我还没搞清楚是什么问题,但在不同的领域一切都很好。微软也证实了我们发送给他们的工作例子是正确的,但是他们没有解释问题出在哪里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40192062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档