En un proyecto que estoy haciendo, deseo darles a los usuarios la opción de eliminar "de forma segura" un archivo, como sobrescribiéndolo con bits aleatorios o de 0. ¿Hay alguna manera fácil de hacer esto en C# .NET? ¿Y qué tan efectivo sería?Eliminación segura de un archivo en C# .NET
Respuesta
Puede invocar sysinternals SDelete para hacer esto por usted. Esto utiliza la API de desfragmentación para manejar todos esos casos extremos difíciles.
Uso de la API de desfragmentación, SDelete puede determinar con precisión cuál cúmulo en un disco están ocupados por los datos que pertenecen a archivos cifrados comprimido, escasa y.
Si desea volver a empaquetar esa lógica en una forma más conveniente, la API se describe here.
No puede eliminar de forma segura un archivo en un sistema de archivos de diario. El único sistema sin diario que aún se usa mucho es fat32. En cualquier otro sistema, la única manera de eliminar de forma segura es triturar todo el disco duro.
EDITAR
La razón segura borrado no está disponible, es que los datos que se utiliza para sobrescribir un archivo no puede ser almacenado en la misma ubicación que los datos que se sobrescribe.
Parece que Microsoft proporciona una herramienta de eliminación segura, pero no parece ser algo que pueda utilizar como reemplazo.
La única buena forma de evitar la recuperación de archivos eliminados, sin destruir el disco, sería encriptar el archivo antes de escribirlo en el disco.
Gracias por la respuesta, he reformulado una pregunta un poco . No importa si el archivo está _totalmente_ borrado, lo único que importa es que utilizo métodos similares a un programa de borrado de archivos estándar de pantano – Chris
@Andrey, no entiendo lo que quiere decir – mikerobi
si el archivo es, digamos, 100mb en tamaño, es completamente impráctico mantener todos los archivos cifrados y originales en la RAM ... – DividedByZero
Primero intento simplemente abrir el archivo y sobrescribir su contenido como normalmente lo haría. Bastante trivial en C#, ni siquiera me molestaré en escribirlo. Sin embargo, no sé cuán seguro sería eso. Por un lado, estoy bastante seguro de que no funcionaría en las unidades de memoria flash y SSD que utilizan algoritmos sofisticados para proporcionar nivelación de desgaste. No sé qué funcionaría allí, tal vez tendría que hacerse a nivel del conductor, quizás sería imposible en absoluto. En las unidades normales, simplemente no sé qué haría Windows. Quizás retendría datos viejos también.
No funcionará en ningún archivo de diario, independientemente del tipo de unidad (para una explicación, consulte mi respuesta). – mikerobi
@mikerobi - Lo sé, pero aparte de eso, esta es la segunda mejor opción. Al menos las utilidades típicas de recuperación serán engañadas. –
No sería seguro en absoluto. En su lugar, es posible que desee ver soluciones alternativas como el cifrado.
Una solución sería encriptar el contenido del archivo de datos. Se usará una nueva clave cada vez que se actualice el archivo. Cuando desee "borrar de forma segura" los datos, simplemente "pierda" la clave de cifrado y elimine el archivo. El archivo seguirá estando físicamente en el disco, pero sin la recuperación de la clave de cifrado sería imposible.
Aquí es una explicación más detallada de por qué "seguro" sobrescribe de archivos es la falta de seguridad:
Sin una herramienta de bajo nivel (fuera de tiempo de ejecución de .NET) no tiene acceso a la ubicación del disco físico. Tome una secuencia de archivos en NTFS, cuando "abre un archivo para acceso de escritura" no tiene garantía de que la copia "actualizada" (en este caso, la versión 101010 aleatoria) se almacene en el mismo lugar (sobrescribiendo así el archivo original).De hecho, la mayoría de las veces esto es lo que sucede:
1) El archivo x.dat se almacena comenzando en el cluster 8493489 2) Abre el archivo x.dat para acceso de escritura. Lo que le devuelve el sistema operativo es simplemente un puntero al flujo de archivos abstraído no solo por el sistema operativo sino también por el sistema de archivos subyacente y los controladores de dispositivo (RAID de hardware por ejemplo) y, en ocasiones, el disco físico (SSD). Actualiza los contenidos del archivo con0s aleatorios y cierra el filestream.
3) Es probable que el SO (y probablemente) escriba el nuevo archivo en otro clúster (por ejemplo, el clúster 4384939). A continuación, simplemente actualizará el archivo MFT que indica que el archivo x ahora está almacenado en 4384939.
Para el usuario final, parece que solo existe una copia del archivo y ahora contiene datos aleatorios, pero los datos originales aún existen en el disco.
En su lugar, debe considerar encriptar el contenido del archivo con una clave diferente cada vez que se guarde el archivo. Cuando el usuario quiere que el archivo sea "eliminado", elimine la clave y el archivo. El archivo físico puede permanecer pero sin la recuperación de la clave de cifrado sería imposible.
el archivo no se puede recuperar sin la clave, por lo que básicamente se pierde ¿no? incorrecto. la clave también se puede recuperar de la misma manera que el archivo, a menos que uno sepa exactamente lo que está haciendo – DividedByZero
- 1. Eliminación segura con PHP 5.3.x
- 2. Borrando de manera segura un archivo usando métodos simples?
- 3. Eliminación de recursos en .NET
- 4. Eliminación de archivos de forma permanente y segura en CentOS
- 5. ver un archivo docx en C# .NET
- 6. filas eliminación de un archivo de Excel utilizando C#
- 7. Eliminación de un archivo en VBA
- 8. Eliminación de un objeto en C++
- 9. Eliminación de un archivo de servidor
- 10. Eliminación de información de un archivo HDF5
- 11. .NET 2.0: File.AppendAllText (...) - Hilo de aplicación segura
- 12. Archivo de bloqueo y eliminación
- 13. Guardar archivo de un byte [] en C# NET 3.5
- 14. ¿Lectura de un archivo CSV en .NET?
- 15. C# eliminación de un controlador de eventos
- 16. Prácticas de codificación de C++ segura
- 17. Reproducción de un archivo .WAV en .NET
- 18. ¿Cómo escribir de forma segura en un archivo?
- 19. Eliminación de un archivo adjunto de Paperclip en Activeadmin
- 20. ¿Cómo saber si existe un archivo en C#/.NET?
- 21. Eliminación de líneas duplicadas en un archivo usando Java
- 22. cómo deshacer la eliminación de un archivo en SVN
- 23. Forma segura de codificar un valor de cookie en C#
- 24. Operador de navegación segura en C#?
- 25. Eliminación de excepciones en constructores de C++
- 26. SqlConnection en C# - práctica de programación segura
- 27. C# openxml eliminación del párrafo
- 28. Eliminación de artefactos JPEG en C#
- 29. Eliminación de marcas de impresora de un archivo PDF
- 30. ¿Cómo puedo borrar un archivo de forma segura?
posible duplicado de [Trituración de archivos en .NET] (http://stackoverflow.com/questions/1046635/shredding-files-in-net) –
Ha perdido completamente el punto de mi respuesta, no hay forma de asegúrese de que los datos que intenta escribir en un archivo ocupen realmente la misma ubicación en el disco que los datos que está reemplazando, para que no pueda hacer lo que está pidiendo. – mikerobi
¿Desea eliminar de forma segura los contenidos o desea sobrescribirlos con bits aleatorios? Ellos no son los mismos. Me parece que sobrescribir el archivo no hará lo que usted quiere. –