我正在用 C# 创建一个 .NET 核心 webapp,它接收用户密码并将其散列以存储在服务器上。我正在使用Rfc2898DeriveBytes
随机生成的盐。但是,我读过我应该避免在整个过程中使用字符串,因为字符串无法从内存中删除。我知道 .NET 核心有 aPasswordBox
将密码保存为 a SecureString
,但SecureString
s 无法转换为字节数组以传递给Rfc2898DeriveBytes
s 的构造函数,而无需大量恶作剧。
由于 webapp 只会在我的服务器上运行,我可以在SecureString
它被传递到我的 webapp 后立即将其转换为字符串吗?如果攻击者设法访问服务器的 RAM 以搜索未删除的字符串,那么我可能无法从一开始就保护任何东西。
如果我仍然应该使用 using SecureStrings
,散列存储它的最佳做法是什么?