gpt4 book ai didi

security - 如何从 Windows Vault 凭据管理器存储和检索凭据?

转载 作者:行者123 更新时间:2023-12-02 20:58:09 26 4
gpt4 key购买 nike

我想在 Windows PC 上安全地存储明文密码。我目前正在使用 DPAPI CryptProtectData 对其进行加密,然后将加密的 blob 存储在用户本地 AppData 中的文件中。

在 Windows 7 中,有 Windows Vault,这是一个凭据管理器(控制面板\用户帐户和家庭安全\凭据管理器),用于存储各种登录类型的登录数据,包括“通用凭据”。从表面上看,这似乎是程序存储凭据的正确位置。但是,我找不到它的任何 API。我读了 Authentication function MSDN 中的引用,但坦率地说迷失在其中。

是否有 Windows Vault 的 API 来存储和检索程序中的凭据,如果是,我在哪里可以找到文档?

最佳答案

非常感谢@Luke 的提示:用于将凭据存储到 Windows Vault 和从 Windows Vault 读取凭据的 Windows API 函数是 CredWrite() CredRead() .这是一个可以编译和运行的代码示例,我用它来确认这些函数确实做了预期的事情:

#include <windows.h>
#include <wincred.h>
#include <tchar.h>
#pragma hdrstop

void main ()
{
{ //--- SAVE
char* password = "brillant";
DWORD cbCreds = 1 + strlen(password);

CREDENTIALW cred = {0};
cred.Type = CRED_TYPE_GENERIC;
cred.TargetName = L"FOO/account";
cred.CredentialBlobSize = cbCreds;
cred.CredentialBlob = (LPBYTE) password;
cred.Persist = CRED_PERSIST_LOCAL_MACHINE;
cred.UserName = L"paula";

BOOL ok = ::CredWriteW (&cred, 0);
wprintf (L"CredWrite() - errno %d\n", ok ? 0 : ::GetLastError());
if (!ok) exit(1);
}
{ //--- RETRIEVE
PCREDENTIALW pcred;
BOOL ok = ::CredReadW (L"FOO/account", CRED_TYPE_GENERIC, 0, &pcred);
wprintf (L"CredRead() - errno %d\n", ok ? 0 : ::GetLastError());
if (!ok) exit(1);
wprintf (L"Read username = '%s', password='%S' (%d bytes)\n",
pcred->UserName, (char*)pcred->CredentialBlob, pcred->CredentialBlobSize);
// must free memory allocated by CredRead()!
::CredFree (pcred);
}
}

通用凭据存储在 Windows Vault 中,如屏幕截图所示:

A generic credential stored in Windows Vault

关于security - 如何从 Windows Vault 凭据管理器存储和检索凭据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com