Ada*_*ile 12 c# encryption passwords
我正在编写一个开源的C#应用程序,我需要能够为每个用户存储已保存的登录信息.通常我只会加密密码,然后将其存储在用户设置文件中,但我担心由于代码是开源的,它有点无法加密它.因为所有人都要做的就是查看代码并获取加密密钥.
当然,它至少会比以纯文本存储的密码更难.但有没有像加密密码的好方法,但即使你有源码,它至少仍然非常难以解密?也许这样做至少几乎不可能在除了加密的计算机之外的任何计算机上解密?
编辑:澄清...我正在存储客户端密码,而不是密码来验证他们的服务登录.它是我无法控制的预先存在的Web服务的客户端.我只是想在本地存储密码以便自动登录...就像任何聊天客户端一样.
编辑2:完全对不起之前不清楚.但是密码必须在某些时候以明文检索并且哈希不是一个选项:(即使服务会让我传递密码哈希,有点打败目的,因为哈希会像密码一样好:P
你要问的基本上是不可能的.
有没有办法在客户机上安全地存储密码,如果它需要被解密.由于您需要连接到服务,我认为这不支持SSL,这进一步加剧了这种情况.在这种情况下,可以通过使用网络分析器轻松找到密码.
有一个游戏(当然是闭源)我需要登录,密码保存在某个地方但是用每个安装所特有的密钥加密.我忘了密码一次,所以我只使用了Wireshark,瞧 - 我可以看到普通密码.
这也让我想起人们抱怨在谷歌浏览器中显示密码很容易......他们显然不知道更好.您可以尝试所需的所有聪明技巧,但是一旦有人访问了计算机,任何应用程序安全性都会被抛出窗口.
因此,考虑到这一点,我会保持加密和解密非常简单.最好的情况是,您可以创建从机器特有的东西派生的密钥,因此窃取加密密码的人将无法在不访问所述唯一密钥的情况下对其进行解密.
我认为,如果您使用 Rijndal 并创建随机盐值并从机器特定的事物(如某些硬件 ID)派生密钥,即使您知道它是如何工作的,也将很难解密,因为您缺少硬件信息。
但您可能会考虑仅存储密码的哈希值并迭代至少 1000 次。哈希值无法转换回原始密码。
还有一个想法:是否可以选择将实现留给使用您的源代码并使加密抽象的人?如果您提供内置捆绑包下载,当然不起作用。但话又说回来:在构建中,您可以使用自己的“秘密”加密,并仍然在源代码中抽象它。