Como hace poco han planteado la duda de como se podia borrar un archivo de forma que no se pudiese recuperar sus datos mediante herramientas especializadas, en base al planteamiento de Zitro y Vanchi, he diseñado este metodo que convierte los datos de un archivo en basura antes de borrarlo.

Para entender un poco todo esto mejor, tanto la funcion de borrado directo de Windows o MS-DOS como el metodo Kill() de Visual Basic 6.0, que apoya sobre la funcion de Windows, solo borran la entrada del archivo de la tabla de ficheros de la particion del disco duro, lo que hace que dichos registros dejen de estar asociados a un conjunto logico o archivo y este deje de ser visible por el sistema operativo y permitan a otros procesos sobrescribir dichos registros para crear nuevos archivos, pero los registros que conformaban el archivo antes de ser borradosiguen estando presentes en la superficie del disco, por lo que una herramienta de recuperacion seria capaz, si no en su totalidad, de leer y recomponer un archivo borrado.

El planteamiento de Zitro y Vanchi, que es el que se usa en sistemas Unix por ejemplo, trata de sobreescribir o modificar los bytes del archivo de forma aleatoria antes de ser borrado. Al hacer esto el archivo pierde todo el formato y estructura de sus datos convirtiendolo en basura imposible de interpretar en caso de querer recomponer el archivo. Este metodo realiza justo esta tarea, la de convertir previamente los datos en basura alterando aleatoriamente cada byte del archivo y despues lo borra:
Código:
' Elimina un archivo de forma logica modificando sus bytes para
' imposibilitar su recuperacion por medio de herramientas especializadas:
Public Sub LogicDeleteFile(Filename As String)
 Dim i As Integer
 Dim hFile As Integer
 Dim b As Byte
 Dim file() As Byte
 
 ReDim file(FileLen(Filename)) ' Redimensionamos el buffer.
 hFile = FreeFile() ' Obtenemos un canal libre.
 ' Abrimos el archivo en modo binario:
 Open Filename For Binary As #hFile
 Get #hFile, , file ' Leemos todo el contenido del archivo.
 ' Recorremos todos los bytes alterando aleatoriamente sus valores:
 For i = 0 To UBound(file)
'Crea una semilla aleatoriausandosegundos como los milisegundos
'desde medianochedel reloj del sistema:
 Call Randomize(Timer)
 file(i) = CByte((255 - 0) * Rnd)
 Next
 Put #hFile, , file ' Escribimos los nuevos datos.
 Close #hFile
 ' Borramos el archivo:
 Call Kill(Filename)
End Sub
Si estais desarrollando una aplicacion que trabaje con datos confidenciales y teneis que realizar borrado de estos archivos este metodo os puede resultar muy util garantizando seguridad a la hora de eliminar totalmente dicha informacion.

Salu2...