首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# web应用程序中的纯文本密码

问c# web应用程序中的纯文本密码
EN

Stack Overflow用户
提问于 2014-03-21 02:17:42
回答 1查看 60关注 0票数 0

如果我在其中一个c#控制器中有一个纯文本密码(比如连接到SMTP邮件服务器),那么攻击者就无法查看此密码(或其他服务器端代码),除非服务器安全性被破坏,这样说对吗?

我在共享主机上,所以我不能用IIS来加密网络配置(据我所知)。如果这是如此糟糕的做法,有没有人有任何建议,如何最好地解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2014-03-21 08:36:52

如果这是如此糟糕的做法,有没有人有任何建议,如何最好地解决这个问题?

这是一种糟糕的做法。虽然您不能阻止可以读取服务器(或备份)上的文件的攻击者找出它(如果他们是好的,很快),但您可以迫使他们花费更多的时间和精力来读取您的代码/反汇编应用程序和配置文件。

是否允许您自行设置SMTP密码?在您的配置文件中存储一个非常高的迭代次数(数百万次;这只是启动延迟!),一个真正的随机**8字节的盐,以及一个长的随机“密码”(二进制更好)。在您的代码中,当应用程序启动时,读取这些值,向盐中添加一个8个真正随机字节的硬编码字符串(一个"pepper"),并使用RFC2898DeriveBytes类生成实际的RFC2898DeriveBytes密码(您可能必须用Base64编码)。不要要求超过20字节的RFC2898DeriveByutes输出;这是使用SHA-1作为本机散列。显然,您需要在更改SMTP密码之前执行此操作:)。

不管您是否有能力更改SMTP,您始终可以加密密码,使用上面的RFC2898DeriveBytes生成一个128位密钥用于AES-128,如果您使用的是.NET 3.5或更高版本,这是.NET中为数不多的FIPS 140-2 compliant encryption classes之一。

如果您想要一种方法来防止简单地读取文件找出密码,您将需要考虑HSM (硬件安全模块)或设备外部的其他安全密钥存储提供程序。准备好打开你的钱包!

**在.NET中,使用RNGCryptoServiceProvider类生成随机字节以供加密使用。

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

https://stackoverflow.com/questions/22541761

复制
相关文章

相似问题

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