Is ProtectedObject really secure? Otherwise, do you have any advice?public class ProtectedBinary : IDisposable{    private byte[] pBArray;    private int originPBArraySize;    public ProtectedBinary(byte[] data)    {        originPBArraySize = data.Length;        Pad(ref data);        ProtectedMemory.Protect(data, MemoryProtectionScope.SameProcess);        pBArray = new byte[data.Length];        Array.ConstrainedCopy(data, 0, pBArray, 0, data.Length);    }    public void Get(out byte[] outArray)    {        ProtectedMemory.Unprotect(pBArray, MemoryProtectionScope.SameProcess);        outArray = new byte[originPBArraySize];        Array.Copy(pBArray, outArray, originPBArraySize);        Unpad(ref outArray);        ProtectedMemory.Protect(pBArray, MemoryProtectionScope.SameProcess);    }    public void Clear()    {        pBArray.Clear(); // set all bytes to 0x00        originPBArraySize = 0;    }    public void Dispose()    {        Clear();    }    private void Pad(ref byte[] bytes)    {        Array.Resize(ref bytes, 16 * ((bytes.Length + 15) / 16));    }    private void Unpad(ref byte[] bytes)    {        Array.Resize(ref bytes, originPBArraySize);    }}public class ProtectedObject<T> : IDisposable{    private ProtectedBinary pBin;    private bool isDisposed;    public ProtectedObject(T obj)    {        byte[] serializedObject = ULBinConvert.Serialize(obj);        pBin = new ProtectedBinary(serializedObject);    }    public void Get(out T obj)    {        if (isDisposed)            throw new ObjectDisposedException(Protected object is disposed);        byte[] serializedObject;        pBin.Get(out serializedObject);        obj = ULBinConvert.Deserialize<T>(serializedObject);        serializedObject.Clear();    }    public void Dispose()    {        if (!isDisposed)        {            pBin.Dispose();            isDisposed = true;        }    }}
Security of ProtectedObject
c#;.net;security