Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar VB para cifrar una carpeta con contraseña

Cómo utilizar VB para cifrar una carpeta con contraseña

Cifrar y descifrar archivos o carpetas

'Este método es adecuado para sistemas WinXP y no ha sido probado en sistemas Win98. Nota: No se puede utilizar para archivos o carpetas del sistema; de lo contrario, provocará la parálisis del sistema.

'Cifrado: Utilice funciones API para agregar los caracteres "..." al final del nombre del archivo o carpeta. \Agregar caracteres "..." al final del nombre del archivo o carpeta. Por ejemplo, cambie el nombre de la carpeta "MiRuta" a "MiRuta...\En "Mi PC", el nombre aparecerá como "MiRuta". El sistema no lo reconocerá y el archivo o carpeta no podrá abrirse, modificarse o eliminarse. El famoso virus de ejecución automática realiza este truco

"Descifrado: elimina los caracteres "..." al final del nombre del archivo o carpeta.

'Copia el siguiente código en la ventana de código del formulario VB

'Controles de ejemplo: Comando1, Comando2, Texto1, todos usan la configuración de propiedades predeterminada

Private Const MAX_PATH = 260

Tipo privado FileTime ' 8 Bytes

LTime As Long

HTime As Long

Tipo final

Tipo privado Win32_Find_Data

dwFileAttributes siempre que

ftCreationTime como FileTime

ftLastAccessTime como FileTime

ftLastWriteTime como hora del archivo

nFileSizeHigh mientras

nFileSizeLow mientras

dwReserved0 mientras

dwReserved1 mientras

cNameFile como cadena * MAX_PATH

cAlternate As String * 14

Tipo de finalización

Función de declaración privada MoveFileEx Lib "kernel32" Alias ​​​​"MoveFileExA" (ByVal lpExistingFileName como cadena, ByVal lpNewFileName como cadena, ByVal dwFlags As Long) As Long

Función de declaración privada GetShortPathName Lib " kernel32" Alias ​​​​"GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Función de declaración privada FindFirstFile Lib "kernel32" Alias ​​​​"FindFirstFileA" (ByVal lpNameFile como cadena, lpFindFileData como Win32_Find_Data) siempre que

Función de declaración privada FindFirstFile como cadena, ByVal lpszShortPath como cadena, ByVal cchBuffer Siempre

Privado p>Función de declaración privada FindNextFile Lib "kernel32" Alias ​​​​"FindNextFileA" (ByVal hFindFile Mientras, lpFindFileData Como Win32_Find_Data) Mientras

Funciones de declaración privada

en FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Private Sub Form_Load()

Text1.Text = "C:\MyPath"

Command1.Caption = "Decrypt": Command2.Caption = "Encrypt"

Me.Caption = "Cifrado y descifrado de directorios o archivos"

End Sub

Subcomando privado1_Click ()

Llamar a SetPathName(False) 'Descifrar

End Sub

Subcomando privado2_Click()

Llamar a SetPathName (Verdadero) 'Cifrado

End Sub

End Sub

Private Sub SetPathName(SetMi As Boolean)

Dim nName As String, NewName como cadena, nSort como cadena, nCap como cadena, dl como largo

nName = Trim (Text1.

If Right(nName, 3) = "... ("Entonces nNombre = Izquierda(nNombre, Len(nNombre) - 3)

Si Derecha(nNombre, 1) = "\" Entonces nNombre = Izquierda(nNombre, Len(nNombre) - 1)

Si SetMi Entonces

NuevoNombre = nNombre amp ".

De lo contrario

NuevoNombre = nNombre

nNombre = nNombre amp; " .

End If

If SetMi Then nCap = "Encrypt" Else nCap = "Decrypt"

nSort = GetShortName(nName) 'Transforma cuál .

p>

Si nSort = "" Entonces

MsgBox "Archivo no encontrado:" amp vbCrLf amp; nName, vbCritical, nCap

Salir Sub

Fin si

Si MoveFileEx(nSort, NewName, 0) = 0 Then Exit Sub 'Cambio de nombre de archivo: distinto de cero indica éxito, admite archivos de solo lectura

MsgBox nCap amp; " Éxito: " amp; vbCrLf amp; nName, vbInformation, nCap

End Sub

End Sub p>

Función pública GetShortName( F como cadena, opcional ShortAll como Bo

olean) As String

'Convertir a un nombre de archivo corto, o nulo si el directorio o archivo no existe. Se puede utilizar para determinar si existe un directorio o archivo.

'La función API GetShortPathName no se puede utilizar directamente porque no es compatible con .NET Framework.

'ShortAll=T significa convertir todos los nombres a nombres cortos; de lo contrario, solo se convertirán las líneas de puntos ".\"

Dim FondID As Long, ID1 As Long, S As Long, nPath como cadena

Dim nF como cadena, InfoF como Win32_Find_Data, qF como cadena, hF como cadena

Dim nName como cadena, nName1 como cadena

nF = F

Do

S = InStr(nF, "..\")

Si S = 0 Entonces Salir Do

qF = Izquierda (nF, S 2): hF = Medio(nF, S 3) 'Dividir en adelante y atrás

CutPathName qF, nPath, nName

nName = LCase(nName)

qF = nPath amp; "\" amp; "*."

Fondo = FF

FondID = FindFirstFile(qF, InfoF) '-1. significa fracaso.

Buscar todos los archivos (carpetas)

ID1 = FondID

Hacer

Si FondID = Find_Err o ID1 = 0 Entonces vaya a Salir1 'No se encontró ninguna entrada coincidente

p>

nName1 = LCase(CutChr0(InfoF. cNameFile)) 'Nombre del archivo (carpeta)

Si nName1 amp ".\" = nName Entonces

nName1 = CutChr0 (InfoF.cAlternate) 'Reemplazar el nombre del archivo con un nombre de archivo corto

Si hF = "" Entonces nF = nPath amp "\" nName1 De lo contrario nF = "\" amp.nName1; amp "\" & hF

Salir Do

Finalizar si

ID1 = FindNextFile(FondID, InfoF) 'Buscar el siguiente, 0 significa error

p>

Bucle

FindClose FondID

Bucle

Salir1:

FindClose FondID

S = MAX_PATH: nName = String(S, vbNullChar)

ID1 = GetShortPathName(nF, nName, S) 'Devuelve el número real de bytes, 0 indica error

Si ID1 = 0 Entonces Salir de la función

Si ShortAll Entonces

Si ID1 gt S Entonces

S = ID1: nName = String(S, vbNullChar)

ID1 = GetShortPathName(nF, nName, S) 'Devuelve el número real de bytes

End If

GetShortName = CutChr0(nName)

Else

GetShortName = nF

Fin si

Función final

Public Sub CutPathName(ByVal F como cadena, nPath como cadena, nName como cadena)

p>

Atenuar I Mientras, Lente Mientras

LenS = Len(F)

Para I = LenS - 1 a 2 Paso -1

Si Medio(F, I, 1) = "\" Entonces

nPath = Izquierda(F, I - 1): nNombre = Medio(F, I 1)

Ir a Salir1

Finalizar si

Siguiente

nPath = F: nName = ""

Salir1:

Si es correcto (nPath,

2) = "..."Entonces

nPath = nPath amp "\"

De lo contrario

If Right(nPath, 1) = "\" Entonces nPath = Left(nPath, Len(nPath) - 1)

End If

If Right( nName, 1) = "\" And Right(nName, 3) lt; gt; "...\"Entonces nName = Left(nName, Len(nName) - 1)

End Sub

Función privada CutChr0(xx As String) As String

Dim S As Long

S = InStr(xx, vbNullChar)

Si S gt 0 Entonces CutChr0 = Left(xx, S - 1) De lo contrario CutChr0 = xx

Función final

'Consulte las referencias a continuación.