एक सुरक्षित स्ट्रिंग प्रकार के निर्माण में विचार

वोट
0

जो मैं कहते हैं - मैं एक सुरक्षित स्ट्रिंग प्रकार के निर्माण शुरू कर दिया है SecureStringV2 - नेट ढांचे में मौजूदा SecureString प्रकार का विस्तार करने के। इस नए प्रकार के मौजूदा प्रकार के लिए (आदि की तुलना, समानता के लिए जाँच) कुछ बुनियादी कार्यक्षमता जोड़ने के लिए जा रहा है, लेकिन अभी भी SecureString प्रकार द्वारा प्रदान की सुरक्षा बनाए रखने, कि स्मृति से बाहर साफ सब कुछ प्रकार के उपयोग के बाद है। मैं मार्शल वर्ग और हैश एल्गोरिदम का उपयोग करते इन सुविधाओं को प्राप्त करने की योजना है। यह कैसे किया जाता है और किया जाना पर संकेत सही सराहना की जाएगी। आप में से किसी के लिए इस को लागू करने की मेरे विचारों के साथ कोई समस्या देखने करता है? धन्यवाद :)

अपडेट: यह जहाँ मेरे विचारों पुस्तकालय के मुख्य वर्ग के संबंध में अब तक मुझे नेतृत्व किया है। एक बार देख ले और मुझे अपने विचार साझा करें।

/// <summary>
///  This class is extension of the SecureString Class in the .Net framework. 
///  It provides checks for equality of multiple SStringV2 instances and maintains
///  the security provided by the SecureString Class
/// </summary>
public class SStringV2 : IEquatable<SStringV2> , IDisposable
{
    private SecureString secureString = new SecureString();
    private Byte[] sStringBytes;
    private String hash = string.Empty;

    /// <summary>
    ///  SStringV2 constructor
    /// </summary>
    /// <param name=confidentialData></param>
    public SStringV2(ref Char[] confidentialData)
    {
        GCHandle charArrayHandle = GCHandle.Alloc(confidentialData, GCHandleType.Pinned);
        // The unmanaged string splices a zero byte inbetween every two bytes 
        //and at its end  doubling the total number of bytes
        sStringBytes = new Byte[confidentialData.Length*2];
        try
        {
            for (int index = 0; index < confidentialData.Length; ++index)
            {                   
                secureString.AppendChar(confidentialData[index]);
            }
        }
        finally
        {
            ZeroOutSequence.ZeroOutArray(ref confidentialData);
            charArrayHandle.Free();
        }
    }

    /// <summary>
    /// Computes the hash value of the secured string 
    /// </summary>
    private void GenerateHash()
    {
        IntPtr unmanagedRef = Marshal.SecureStringToBSTR(secureString);
        GCHandle byteArrayHandle = GCHandle.Alloc(sStringBytes, GCHandleType.Pinned);
        Marshal.Copy(unmanagedRef, sStringBytes, 0, sStringBytes.Length);
        SHA256Managed SHA256 = new SHA256Managed();

        try
        {
            hash = Convert.ToBase64String(SHA256.ComputeHash(this.sStringBytes));
        }
        finally
        {
            SHA256.Clear();
            ZeroOutSequence.ZeroOutArray(ref sStringBytes);
            byteArrayHandle.Free(); 
            Marshal.ZeroFreeBSTR(unmanagedRef);
        }
    }

    #region IEquatable<SStringV2> Members

    public bool Equals(SStringV2 other)
    {
        if ((this.hash == string.Empty) & ( other.hash == string.Empty))
        { 
            this.GenerateHash();
            other.GenerateHash();
        }
        else if ((this.hash == string.Empty) & !(other.hash == string.Empty))
        {
            this.GenerateHash();
        }
        else if (!(this.hash == string.Empty) & (other.hash == string.Empty))
        {
            other.GenerateHash();
        }

        if (this.hash.Equals(other.hash))
        {
            return true;
        }
            return false;
    }

    #endregion

    #region IDisposable Members

    public void Dispose()
    {
        secureString.Dispose();
        hash = string.Empty;
        GC.SuppressFinalize(this);
    }

    #endregion
}

}

12/03/2009 को 15:30
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
1

भूल जाते हैं कि SecureString दो तरह एन्क्रिप्शन का उपयोग करता है। मैं अपनी कक्षा में किसी भी एन्क्रिप्शन नहीं दिख रहा।

25/08/2010 को 17:28
का स्रोत उपयोगकर्ता

वोट
1

बस एक त्वरित नोट - आप डेटा समानता के साथ हैश समानता भूल समस्याओं के लिए पूछ रहे हैं - सुनिश्चित करें कि उन्हें अलग किया जा रहा है की संभावना कम है, लेकिन एक बार आप इसे मारा यह एक बुरा सपना हो जाएगा: / (मैं डिबग करने के लिए "लक" था और )); एक कस्टम हैश नक्शा कार्यान्वयन है कि एक ही गलती कुछ साल पहले किए गए तो इस पर मुझ पर भरोसा कृपया ठीक करें।

12/03/2009 को 19:58
का स्रोत उपयोगकर्ता

वोट
0

यदि आप एक चार [] सरणी में आप securestring के लाभों को कम करने के लिए शुरू गुजरती हैं। इससे पहले कि यह साफ़ हो जाता है चार [] सरणी कचरा कलेक्टर द्वारा स्मृति में चारों ओर कॉपी किया जा सकता है।

12/03/2009 को 18:30
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more