如果我保存新凭证:
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 加密这些值?
提前致谢!
您始终可以使用 DPAPI 中的 CryptProtectData 和 CryptUnprotectData 函数对来保护您的数据。
如果您的代码(或任何部分)将用作
SYSTEM
帐户(或任何服务帐户),您需要在 CRYPTPROTECT_LOCAL_MACHINE
参数中设置 dwFlags
标志:
设置此标志后,它将加密的数据与当前计算机而不是与单个用户相关联。调用 CryptProtectData 的计算机上的任何用户都可以使用 CryptUnprotectData 来解密数据。