C# 如何解密从安全桌面获得的身份验证缓冲区
我试图请求用户在安全桌面上输入凭据,但找不到解密生成的身份验证缓冲区的方法: 通过以下方式获得凭据: 凭据的解包方式为: 如果我在C# 如何解密从安全桌面获得的身份验证缓冲区,c#,winapi,credentials,C#,Winapi,Credentials,我试图请求用户在安全桌面上输入凭据,但找不到解密生成的身份验证缓冲区的方法: 通过以下方式获得凭据: 凭据的解包方式为: 如果我在CredUIPromptForWindowsCredentials中指定CREDUIWIN\u SECURE\u提示符,如上例所示,CredUnPackAuthenticationBuffer将失败,并出现错误。如果我使用CREDUIWIN\u GENERIC而不是安全桌面,它会成功 我如何从安全桌面上的加密凭据中获取名称、域和密码?或者如果不可能,我如何使用它们?我
CredUIPromptForWindowsCredentials
中指定CREDUIWIN\u SECURE\u提示符
,如上例所示,CredUnPackAuthenticationBuffer
将失败,并出现错误
。如果我使用CREDUIWIN\u GENERIC
而不是安全桌面,它会成功
我如何从安全桌面上的加密凭据中获取名称、域和密码?或者如果不可能,我如何使用它们?我有类似的问题-我获得的密码与指定的加密blob相同,域缓冲区也有同样的情况,如果我启用秘密桌面…我也会在这里停下来。一个安全的提示确实。。。大多数人无法使用它。。。
CREDUI_INFO cui = new CREDUI_INFO()
{
cbSize = (uint)Marshal.SizeOf(typeof(CREDUI_INFO)),
pszMessageText = "MyMessage",
pszCaptionText = "MyCaption",
};
bool save = false;
uint authPackage = 0U;
IntPtr authBuffer;
uint authBufferSize;
uint error = CredUIPromptForWindowsCredentials(
ref cui,
0U,
ref authPackage,
IntPtr.Zero,
0U,
out authBuffer,
out authBufferSize,
ref save,
CREDUIWIN_SECURE_PROMPT);
uint userBufferSize = CREDUI_MAX_USERNAME_LENGTH;
uint domainBufferSize = CRED_MAX_STRING_LENGTH;
uint passwordBufferSize = CREDUI_MAX_PASSWORD_LENGTH;
StringBuilder userBuffer = new StringBuilder((int)userBufferSize);
StringBuilder domainBuffer = new String((int)domainBufferSize);
IntPtr passwordBuffer = Marshal.AllocCoTaskMem((int)passwordBufferSize);
bool success = CredUnPackAuthenticationBuffer(
CRED_PACK_PROTECTED_CREDENTIALS,
authBuffer, authBufferSize
userBuffer, ref userBufferSize,
domainBuffer, ref domainBufferSize,
passwordBuffer, ref passwordBufferSize);