回答
密码:不,这是因为安全原因而不被保留 - 它被使用,然后被丢弃。您可以从注册表中为该用户检索加密的密码,并给予足够的权限,然后使用类似rainbow tables的密码对其进行解密,但使用当前方法这非常耗费资源和耗时。更好地提示用户。或者,如果您想要像Novell那样实施某种'单点登录'系统,您应该通过GINA(Vista之前)或Credential Provider(Vista)来完成,这将导致您的代码在登录时被授予用户名和密码,只有密码可用。
对于用户名,获取当前用户名(运行代码的用户)很容易:AdvApi32.dll中的GetUserName函数完全适合您。
如果您作为一项服务运行,您需要记住没有一个“登录用户”:除了任何实际的任何时间,任何时候都有几个如LocalSystem,NetworkService,SYSTEM和其他帐户人。 This article provides some sample code and documentation这样做。
GetUserName会为您提供名称,但您无法获得密码。这甚至不是Windows存储的东西,AFAIK - 只是你的密码散列。
根据你想要达到什么(你可以告诉我们更多..)可以模仿登录用户并代表他/她做些什么。
谢谢 - 这就是我的想法。 – dennisV 2008-09-22 07:22:35
由于加密后的用户密码无法获取(更不用说它不是以明文形式存储密码的标准做法)。
用于获取用户名,您可以使用GetUserName或NPGetUser
请确定它是如何完成的,但http://www.nirsoft.net/utils/network_password_recovery.html的“网络密码恢复”工具似乎从某个缓存中获取密码。
非常有趣 - 谢谢! – dennisV 2008-09-22 07:35:27
全部Windows API中的身份验证的详细信息可以在MSDN上找到: http://msdn.microsoft.com/en-us/library/aa374735(VS.85).aspx
重新“网络密码恢复”工具
的Windows(截至XP)存储在passwd的一个简单方便的拷贝,打破加密 - 用于连接到旧式lanmanager网络共享。 这些工具通常会尝试使用所有可能的密码,使用彩虹表(预先加密的字典词语加密版本)加快速度。
在XPsp2/3 Vista中,此功能已删除。新的加密技术很难破解,需要花费很长时间来尝试所有可能的值,还有一些在线服务可以在大量机器上运行,以便为您提供价格的快速回答。
要回答原始海报 - 通常不会存储密码并将其与用户输入的内容进行比较。您对输入的密码进行加密(实际上是散列)并将其存储。要检查密码,您可以对用户执行的任何操作执行相同的加密,然后进行比较。通常不可能从加密表单返回到真实密码。
编辑我怀疑你在问这里的错误问题 - 你为什么要密码,你想要验证什么,以及什么时候?
是的,我明白了。提示用户比较“不寻常”更安全,因为我没有看到太多的应用程序这样做。 – dennisV 2008-09-22 23:20:39
对于许多评论谁相信这是不可能揭示当前登录用户的密码,请参阅Dump cleartext passwords of logged in user(s)它展示了如何使用mimikatz做到这一点:
mimikatz # privilege::debug
Demande d'ACTIVATION du privilège : SeDebugPrivilege : OK
mimikatz # sekurlsa::logonPasswords full
...
Utilisateur principal : user
Domaine d'authentification : domain
kerberos :
* Utilisateur : user
* Domaine : domain
* Mot de passe : pass
我不了解Windows登录密码......但您绝对可以从凭证管理器中提取纯文本密码。例如,这里有一个程序来提取TFS的密码。在大多数情况下,这与Windows登录相同。
namespace ShowPassword
{
using Microsoft.TeamFoundation.Client;
using System;
using System.Net;
class Program
{
static void Main(string[] args)
{
var tpc = new TfsTeamProjectCollection(new Uri("http://mycompany.com/tfs"));
var nc = tpc.Credentials as NetworkCredential;
Console.WriteLine("the password is " + nc.Password);
}
}
}
我在vs 2015中用Nuget包TeamFoundation ExtendedClient编译为“console”应用程序。
- 1. 获取Windows登录用户名ASP .net
- 2. 使用用户名/密码登录Instagram
- 3. Sharepoint的用户名/密码登录
- 4. 在PHP中获取登录用户名
- 5. 获取C#中登录的用户名
- 6. C#用户名和密码登录框
- 7. mysql登录用户名密码
- 8. SQL Server登录用户名和密码
- 9. CakePHP登录用户名/密码验证
- 10. 用户名和密码登录
- 11. 如何在Windows中获取登录用户的全名?
- 12. 如何在php中获取登录用户的用户名?
- 13. 从asp.net的Windows登录获取用户
- 14. zendesk - 最终用户使用用户名和密码登录
- 15. 登录许多用户使用一个用户名和密码
- 16. 如何在Dynamics CRM上获取登录用户的密码?
- 17. 如何在当前登录用户的Windows应用程序中存储用户设置(用户名,密码)
- 18. SaltStack:获取登录的用户名
- 19. 在linq中获取基于客户端的用户登录名?
- 20. 修改登录到Windows帐户时用户输入的密码
- 21. 无法在PHP中使用用户名和密码登录
- 22. 在java中使用用户名和密码登录系统
- 23. 在iPhone中使用用户名和密码登录表单
- 24. 如何在没有用户登录时获取Windows组名称
- 25. 用户名和密码通过ajax登录..无法登录
- 26. 登录后获取用户名
- 27. 无法获取$ _SESSION登录用户名?
- 28. pysvn:获取当前登录用户名
- 29. 如何从WordPress登录名或用户名获取用户ID
- 30. 如何获取登录的Windows用户的名字和姓氏?
谢谢 - 我不想破解密码,我只想保存用户一步,但由于没有“好”的方法来做到这一点,我只是提示用户。 – dennisV 2008-09-22 07:34:13