凭证管理器 CredentialBlob 明文

问题描述 投票:0回答:1

如果我保存新凭证:

CREDENTIALW cred = { 0 };
...
cred.Type = CRED_TYPE_GENERIC;
cred.TargetName = convert("PIN");
cred.CredentialBlob = (LPBYTE)pBlob; // value here: "password"
..
BOOL ok = ::CredWriteW(&cred, 0);
...

然后收到了:

PCREDENTIALW pcred;
BOOL ok = ::CredReadW(L"PIN", CRED_TYPE_GENERIC, 0, &pcred);

我可以看到明文密码。我应该单独加密/解密 CredentialBlob 值还是也可以使用 Win32 API 加密这些值?

提前致谢!

windows winapi windows-credential-provider
1个回答
0
投票

您始终可以使用 DPAPI 中的 CryptProtectDataCryptUnprotectData 函数对来保护您的数据。

如果您的代码(或任何部分)将用作

SYSTEM
帐户(或任何服务帐户),您需要在
CRYPTPROTECT_LOCAL_MACHINE
参数中设置
dwFlags
标志:

设置此标志后,它将加密的数据与当前计算机而不是与单个用户相关联。调用 CryptProtectData 的计算机上的任何用户都可以使用 CryptUnprotectData 来解密数据。

© www.soinside.com 2019 - 2024. All rights reserved.