我正在制作一个 twitter 客户端,并且正在评估保护用户登录信息的各种方法。
- 散列显然不这样做
- 以可逆的方式混淆就像试图躲在我的手指后面
- 纯文本听起来很混杂
- 要求用户每次都输入他的密码会使应用程序厌烦
有任何想法吗 ?
您可以进行一些操作系统调用来为您加密密码。
在 Windows 上:
什么平台?
在 *nix 上,将密码以纯文本形式存储在主目录的子目录中 chmod 为 400 的文件中。参见例如 ~/.subversion。管理员无论如何都可以对用户做任何他们喜欢的事情,包括用他们自己的捕获密码的黑客版本替换你的程序,所以他们可以看到文件并没有什么坏处。请注意,取出该硬盘的人也可以访问该密码 - 如果这是一个问题,那么请让用户每次重新输入密码或检查此版本的 *nix 是否具有文件加密。
在 Windows Pro 上,将密码存储在加密文件中。
在 Windows 业余爱好者中,执行与 *nix 相同的操作。[编辑:正如 Aleris 建议的那样,CryptProtectData 看起来不错。如果它在所有 Windows 上都可用,那么它解决了仅支持加密文件的更昂贵版本的问题]。
在 Symbian 上,将密码存储在您的数据笼中。具有 AllFiles 权限的程序很少见,而且应该是值得信赖的,有点像 *nix 管理员。
CryptProtectData 是一个用于存储此类敏感数据的 windows 函数。
http://msdn.microsoft.com/en-us/library/aa380261.aspx
例如,看看 Chrome 如何使用它:
http ://blog.paranoidferret.com/index.php/2008/09/10/how-google-chrome-stores-passwords/
对于 Windows:使用 DPAPI(用户存储)加密密码并将其存储在您的设置文件或其他位置。这将在每个用户的基础上工作,例如,同一台机器上的不同用户将拥有不同的不相关的加密密钥。
你不能一边吃蛋糕一边吃。要么存储密码(您已排除),要么不存储并要求每次都输入密码(您已排除)。
拥有一个好的对称加密方案,它应该使解密不值得尝试的凭据变得足够困难。否则,如果服务只需要通过网络发送散列,您可以加密存储 hast。这样,即使是解密也不会让攻击者更接近解决方案。但是其他用户是真实的。如果您存储数据,则可以找到它。关键是在安全性和可用性之间找到平衡。