簡體   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