Oh, VB ...
disculpa que estuve offline : exámenes >_<
el ejemplo que te dí es para C#, así que, supongo que no te sirve ...
podés llamar Dispose() directamente en el objeto SecureString ...
System.String no implementa IDisposable, así que es todo un tema saber si REALMENTE se fue de la memoria ...
Pasa que en .NET no hay eliminación determinística verdadera, todo está a la merced del GC...
lo que podés hacer es tomar prácticas que "sugieran" la inutilidad de un objeto en un X momento ...
es más, cito de SecureString esto :
Una instancia de la clase System.String es inmutable y, cuando ya no se necesita, no se puede planear mediante programación para la recolección de elementos no utilizados; es decir, la instancia es de sólo lectura una vez creada y no es posible predecir cuándo se eliminará de la memoria del equipo. Por consiguiente, si un objeto String contiene información confidencial, como una contraseña, un número de tarjeta de crédito o datos personales, existe el riesgo de que la información se pueda revelar una vez utilizada, porque la aplicación no puede eliminar los datos de la memoria del equipo.
con SecureString sí podés compararlas..
acá te dejo un post :
http://weblogs.asp.net/pglavich/archive/2005/08/12/422330.aspx y
http://weblogs.asp.net/pglavich/archive/2005/08/15/422525.aspxAhora (lo que le quita sentido al post anterior y parte de este post), para qué esmerarse en borrar la string obtenida de un archivo, ya que si te ponés con FileMon al segundo sacás que X proceso abrió tal archivo y obtenés esa string (que en teoría DEBERÍA ESTAR cifrada en algún algoritmo) ..
si referís a la contraseña ingresada por el usuario ..
borrar la string que puso el usuario es tan simple como pass = "" para quitarle el contenido ...
pero tené en cuenta que si realmente querés algo de seguridad, vas a guardar el hash de la contraseña correcta en el mismo compilado, vas a tomar lo ingresado por el usuario, cifrar ese input con algún algoritmo (ver abajo) y comparar hashes ...
después, si es correcto la string con el valor ingresado se la setea en "", inicializás el programa y listo (al no poderse borrar, aunque claro, podés perder la referencia al objeto a propósito así el GC lo marca para la eliminación)...
o sea, lo estándar....
claro que este método es vulnerable a colisiones (donde dos inputs distintos dan un mismo output)
podrías agregarle salt al hash (
http://en.wikipedia.org/wiki/Salt_(cryptography) para evitar esto (aunque si mal no recuerdo, oí de unos artículos sobre cómo calcular el salt de un hash)
MD5 :
http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspxSHA512 :
http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha512.aspxAlex~