我正在处理的程序的一个功能请求是能够保存用户输入的凭据列表,以便可以共享它们.启发此请求的特定用例是在大型企业网络上使用我们的程序,该网络由相当好的LAN组成,这些LAN通过片状WAN连接.我们的想法是,不是让我们的程序在WAN关闭时击败WAN,而是发送一个包含严密保护的管理员凭据的"配置"文件,在每个局域网中运行并压缩结果并通过电子邮件发送给它背部.
是啊.
我最初的本能是嘲笑这个请求 - 保存密码?真?当然,公司的网络部门更愿意尝试销售他们拥有的任何广域网产品 - 但事实证明我使用凭证的其中一个类可以采用SecureString,而且,总是很好的关注你可以节省一些人的努力.这让我想知道:
是否可以保存加密的SecureString,以便我可以将敏感数据保存到文件中并在其他地方打开?
您有什么想法,Stack Overflow?
SecureString中没有保存支持,它旨在作为保护内存中托管字符串的机制,仅用于与非托管API进行交互.如果密码存储在System.String实例中,则由于System.String的性质,安全性会降低.垃圾收集和实习的存在会使密码在内存中的时间超过必要的时间.同样由于.NET的大量调试工具,通过反射或其他.NET API访问字符串会更加容易,即使没有更长的生命周期.
如果您要在磁盘上保存密码,那么您的安全性就会受到很大影响.如果有人可以物理访问机器或管理员级远程访问,那么您可以做的最好的事情就是让它变得更加困难,但绝不可能.使用加密API,将其存储在安全位置,配置访问权限.
除此之外,Merus,我建议你尝试改进整个系统,因为对于你正在描述的用例(假设我理解它),你最好存储哈希而不是实际的密码.