繁体   English   中英

是否可以为SecureString创建显式或隐式运算符以进行字符串转换?

[英]Is creating an explicit or implicit operator for a SecureString to string conversion possible?

我已经对各种转换方法进行了一些研究,并且已经使用了explicitimplicit operators

注意到System.Security.SecureString是一个sealed类(它不能继承),是否可以编写一个能够在System.Security.SecureStringSystem.String之间进行转换的explicitimplicit operator (利用这里描述的方法)。

例如,我知道你必须在被转换对象的(部分)类中编写operator 因此,我认为最好的方法是继承类,并编写必要的operators

是否有可能a)使用System.Security.SecureStringexplicitimplicit operator转换为System.String ,b)执行类sealed的类对象的转换?

如果没有,除了使用类方法之外还有另一种方法可以执行转换吗?

假设我是微软产品的消费者,请提供实用的答案。

注意到System.Security.SecureString是一个密封类,是否可以编写一个能够在System.Security.SecureStringSystem.String之间执行转换的显式或隐式运算符?

是的, 如果您是基类库团队的成员,您可以这样做。 当然,这样做是个坏主意。

如果您不是BCL团队的成员,那么没有。 您需要能够更改两个类之一的源代码。

正如其他地方所讨论的那样,对原始问题的简单回答是否定的,不可能在SecureString中添加运算符来执行任何密封操作。

“(b)对班级密封的班级对象进行转换”的答案更为复杂。

你可以做的是创建自己的struct ,例如称为EncryptedString,它将SecureString作为private字段。 然后,您可以自由地将任何SecureString < - > string转换和比较运算符和方法添加到该struct以满足您的需求。 严格来说,这不是执行类对象的转换,而是组成一种新type来满足您的需求。 俗话说“构图而不是继承”(参见http://en.wikipedia.org/wiki/Composition_over_inheritance ),实际上这种方法既满足了你的需求又被视为OO“最佳实践”。

现在免责声明:

SecureString的重点在于,与string不同,它是安全的。 如果您开始将SecureString转换为string (或允许从string创建SecureString ),您将破坏该类的整个点。

因此,如果您需要进行比较,请使用Marshal.SecureStringToBSTR()Marshal.StringToBSTR()将两者转换为BSTR structures ,比较它们,擦除内存并释放它,或者使用一些类似的机制来最小化损害SecureStrings安全性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM