3

DPAPI-NG を使用してデータを暗号化しようとしていますが、NCryptProtectSecretの実行に失敗し、次のように返されます。

0x80090034 (NTE_ENCRYPTION_FAILURE)

ローカル ユーザー SID でNCryptCreateProtectionDescriptorを作成しました。

"SID=S-1-5-21-2942599413-360359348-3087651068-500"

次に、記述子のこのインスタンスをNCryptProtectSecretの入力として使用しますが、機能しません。

次の保護記述子を使用する場合:

"LOCAL=user"

すべて問題ないように見えますが、ユーザーまたはグループの SID では機能しません。Windows Server 2012R2 および Windows Server 2016 でこれをテストしました。

何か案が?

コードサンプルは次のとおりです。

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**
4

4 に答える 4

1

PlainText と PlainTextLength を Secret と SecretLength に置き換えます。

于 2016-12-27T13:29:18.373 に答える
0

アプリケーションを実行しているユーザーが実際にユーザーであることを確認ます

S-1-5-21-2942599413-360359348-3087651068-500

コマンドプロンプトからこれをテストできます:

>whoami /user

USER INFORMATION
----------------

User Name     SID
============= ============================================
erbium\zeljko S-1-5-21-2942599413-360359348-3087651068-500

NTE_ENCRYPTION_FAILURE実際に持っていないグループ SID (グループ) を使用しようとしたときに、 を受け取りましたDomain Users

誰がコードを実行しているかと比較して、間違った sid を持っているだけかもしれません。

于 2017-10-05T21:53:51.730 に答える