当前位置: 首页 > 编程语言 > C#

在程序代码中安全地存储密码?分享

时间:2023-04-11 00:02:33 C#

在程序代码中安全存储密码?我的应用程序使用RijndaelManaged类来加密数据。作为此加密的一部分,我使用加载了密码的SecureString对象,将其转换为字节数组并在运行时将其加载到RajindaelManaged对象的Key中。我的问题是存储此SecureString。用户输入的密码可以在运行时输入,并且可以“安全地”加载到SecureString对象中,但是如果没有给出用户输入的密码,那么我需要默认一些东西。所以问题最终归结为:如果每次我的应用程序运行时我都必须将一些已知的字符串或字节数组加载到SecureString对象中,我该怎么做?“加密”的数据最终会被另一个应用程序解密,所以即使没有指定用户输入密码,我仍然需要在从一个应用程序转到另一个应用程序时对数据进行加密。这意味着我不能随机设置默认密码,因为其他应用程序将无法正确解密它。我想到的一个可能的解决方案是创建一个仅发出单个密码的dll,然后我获取该密码并在运行时通过几个不同的哈希/重组函数运行它,然后我最终将其输入到secureStringobject中。这样够安全吗?为清楚起见而编辑*:加密数据通过文件在机器之间传递。将其视为始终具有密码的Zip文件,如果用户未直接输入任何密码,则假定为默认密码。使用硬编码到可执行文件中的字符串进行对称加密是没有意义的。它只是给人一种虚假的安全感。这种情况没有散列修复。请参阅此PidginFAQ,了解不同上下文中的相同观点。我不清楚为什么您认为需要加密应用程序间通信。如果此通信是本机的本地通信,那么我认为不需要加密,尤其是非用户特定的加密。这是DRM方案吗?编辑:如果它被传递给另一台机器,也许你可以硬编码一个公钥并让另一台机器用匹配的私钥解密它。让我先回答你的最后一个问题。“这样够安全吗?”唯一能回答的人就是你。这里没有人知道“足够安全”在您的应用程序上下文中意味着什么。您正在构建一个应用程序来记录青少年日记吗?当然,它会“足够安全”。您是否正在构建一个应用程序来加密信息或向军用级安全系统进行身份验证?不,甚至没有关闭。如果您打算将密码存储在源代码中并因此可执行,那么您只能依赖一种安全类型,那就是隐蔽式安全。如果您的问题是您不能或不会将密码存储在源代码中,那么将其移动到单独的dll中并不能解决任何问题,您只需将问题移动到另一个项目中即可。不过,我想知道一些事情。你说“我必须默认某些东西”。是的?您是否尝试过在源代码中存储安全密码字符串的默认值?“THISISNOTAPASSWORD”怎么样?你想要埃里克·利珀特的盐吗?(原始博客文章)另请阅读他的文章,为他的工作使用正确的工具,其中包含以下提示:0)如果可以,根本不要去那里。加密很难做到正确,通常一开始就是错误的解决方案。使用其他技术来解决您的安全问题。1)如果问题是不可信任的客户端,那么不要构建需要信任客户端的安全解决方案。2)如果您可以使用现成的部件,请这样做。3)如果你不能使用现成的部件而必须使用密码学,那么不要使用你不完全理解的密码学。4)如果你必须使用一个你不完全理解的密码系统,至少不要用它来解决它不能解决的问题。5)如果你必须使用加密系统从树上滑下来,至少不要让可能有恶意的客户端选择加入加密消息。自己选择代币。如果令牌必须包含来自客户端的信息,请以某种方式对其进行清理;要求它只是直接的ASCII文本,插入随机空格等。6)如果您必须允许客户端选择令牌,那么不要加密令牌本身。签名令牌的加密安全散列。攻击者更难选择生成所需散列的令牌。7)不要使用用于保护传入消息的相同密钥对来加密传出消息。为您要执行的每个逻辑上不同的操作获取一个密钥对。8)双向加密通信。9)考虑使用撤销机制,这样一旦你知道Eve正在攻击你,你至少可以撤销她的许可证。(或者你可以撤销你知道已经泄露的许可证,等等。)这篇关于保护SQL连接字符串的文章应该适用于存储加密的密码,让操作系统处理加盐种子的加密以供你解密。听起来我应该使用PKI解决方案而不是加密/解密。如果您有另一个应用程序需要使用加密数据,那么您可以拥有该应用程序的密钥对并将公钥提供给正在加密的应用程序。这样您仍然可以保证数据安全,但不会引入一堆最终无法提供足够保护的额外代码。快速谷歌搜索给了我这篇代码项目文章讨论在.Net中使用Windows证书存储以上是C#学习教程:在程序代码中安全存储密码?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: