首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何在本地存储多用户应用程序的密码?

我应该如何在本地存储多用户应用程序的密码?
EN

Stack Overflow用户
提问于 2011-05-08 15:13:07
回答 6查看 3.3K关注 0票数 4

我想创建一个多用户应用程序,但我不知道如何保存和读取加密的密码。

代码语言:javascript
复制
procedure SavePass(Password: WideString);
var
  Pass: TIniFile;
begin
  Pass := TIniFile.Create(ChangeFileExt(Application.ExeName, '.PASS'));
  Pass.WriteString('Users', 'USERNAME', Password);
  Pass.Free;

密码必须存储在计算机上。这是可行的,但是用它保存密码是愚蠢的。散列密码也很好。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-08 16:29:53

如果连接软件接受哈希密码,它不会阻止窃取哈希密码的人进行连接。它所要做的就是隐藏真实的密码。

此外,如果您连接的软件不接受哈希密码(数据库、网站等),您将不得不以这样一种方式存储您的密码,以便您可以将其恢复到原始状态。散列版本在这一点上帮不了你。

如果你想打乱你的存储,这样人们就不能读取文件,你可以使用Windows.EncryptFile()Windows.DecryptFile()。在较新的Delphi中,它被整齐地包装在IoUtils.TFile.Encrypt()IoUtils.TFile.Decrypt中。

如果你真的想阻止其他人读取你的明文版密码,你必须使用一些带有密钥的加密。那么你把密钥存储在哪里呢?这会违背存储密码的全部目的。例如,最好通过使用用户权限来防止其他用户访问文件系统,因为您或您的软件可以做的任何事情,“黑客”都可以做,如果他拥有相同的权限。

票数 9
EN

Stack Overflow用户

发布于 2011-05-08 18:15:02

我的建议是,除非你真的需要,否则不要在你的应用程序中使用密码。用户体验通常不需要输入和记住另一个密码。

对于我的应用程序,我默认使用当前用户的域名和用户名作为标识。用户已经使用密码登录,如果他们需要,也可以使用更安全的系统登录。只有通过登录,他们才能成为当前用户。然后,我的服务器接受它作为它们的标识。

它的变体还包括可选的传递机器名,以便同一用户在不同的计算机上得到不同的对待(当他们需要同时使用多台计算机时)。当然,如果你愿意,你仍然可以允许一个普通的密码。

票数 3
EN

Stack Overflow用户

发布于 2011-05-08 15:26:26

您应该存储散列密码。例如,您可以使用Delphi Cryptography Package中的一种SHA算法。当您检查密码时,对用户提供的密码进行散列,并与保存在文件中的密码进行比较。

您是否考虑过使用Windows安全性,而不是尝试使用自己的安全性?

另外,如果您的程序驻留在程序文件目录下,并且UAC正在使用中,则很容易在写入程序目录时遇到问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5926126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档