【问题标题】:How to Append SecureString to SecureString in a secure way如何以安全的方式将 SecureString 附加到 SecureString
【发布时间】:2016-03-01 12:28:10
【问题描述】:

如何追加多个SecureStrings?

因为我做不到

SecureString pepper 
SecureString salt
SecureString pepperAndSalt = pepper + salt;

如果我会使用
SecureString.AppendChar(Char)
我必须将 salt 转换为不安全的 char 数组,这是我想避免的。

【问题讨论】:

    标签: c# security append securestring


    【解决方案1】:

    你不能1by definition

    请注意,SecureString 没有检查、比较或转换 SecureString 值的成员。此类成员的缺失有助于保护实例的价值免受意外或恶意暴露。使用 System.Runtime.InteropServices.Marshal 类的适当成员(例如 SecureStringToBSTR 方法)来操作 SecureString 对象的值。

    一旦你得到一个值,你就不能把它拿出来。

    1:除非您愿意通过使用Marshal.SecureStringToBSTR 来开始使用非托管代码,但这会违背SecureString 的使用...

    【讨论】:

    • 所以看来我必须接受没有办法做到这一点安全
    • 除非您决定使用SecureStringToBSTR 筛选非托管内存(并记得自己清理),否则不会。但是在您的场景中使用SecureString 是否值得?它真的提供了额外的安全性吗? (顺便说一句,加密盐is meant to be public。)
    • 你是对的,有时我会沉思太多而失去对整件事的关注
    【解决方案2】:

    解决方法可以使用this 答案中描述的System.Runtime.InteropServices.Marshal 类将安全字符串转换为字符串,附加两个字符串并将连接的字符串转换回安全字符串

    【讨论】:

    • 这会破坏SecureString的使用
    • 是的,但如果没有其他办法,则需要在安全性和完成工作之间进行权衡
    • 首先将SecureString 转换回String 完全违背了使用SecureString 的目的。操作它们的唯一合理方法是直接处理内存(您链接的问题的答案中的第二个 sn-p)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2013-08-25
    • 1970-01-01
    相关资源
    最近更新 更多