1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Encriptación de archivos con VB.Net y dividir archivos grandes y unir con .bat
« en: 09 de Marzo 2015, 04:53 »
Bueno, esta es la primera aplicación con carácter profesional que he creado. Acepto ideas de todo tipo, y si proporcionan códigos para su mejora intentaré anexarlos lo más pronto posible, perdón si el código fuente está desorganizado, no me ha dado tiempo de organizarlo. Bueno, ahora la descripción
1. Permite dividir archivos grandes y crear un archivo .bat para su unión (solamente si no se ha encriptado el archivo)
2. Encriptación de varios tamaños para la seguridad del archivo
3. Claves seguras gracias a la encriptación de las mismas (sólo puede leerlas el programa)
4. Programa ligero y de fácil uso
5. Ayudas para entender las funciones del programa
Nota: Si alguien me pudiera ayudar para volver más comprensible el código se lo agradecería mucho
Al parecer, el foro no me permite expresar todo el código, así que dejo el link para modificaciones
Link del proyecto completo
https://mega.co.nz/#!yBUTmYJJ!JzL0IvD-zTNpQE_hlOMmQLlzLohHvv9DP2zd0ZE2v9k
1. Permite dividir archivos grandes y crear un archivo .bat para su unión (solamente si no se ha encriptado el archivo)
2. Encriptación de varios tamaños para la seguridad del archivo
3. Claves seguras gracias a la encriptación de las mismas (sólo puede leerlas el programa)
4. Programa ligero y de fácil uso
5. Ayudas para entender las funciones del programa
Nota: Si alguien me pudiera ayudar para volver más comprensible el código se lo agradecería mucho
Al parecer, el foro no me permite expresar todo el código, así que dejo el link para modificaciones
Código: [Seleccionar]
Imports System.IO
Imports System.Collections
Public Class form1
Dim Tamaño As Long
Dim TamañoRes As Long
Dim Encriptar As Boolean
Dim NumCrip As Byte
Dim Encrip() As Byte
Dim X As Long
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
With OpenFileDialog1
.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer)
Dim ret As DialogResult = .ShowDialog ' abre el diálogo
' si se presionó el botón aceptar ...
If ret = Windows.Forms.DialogResult.OK Then
TextBox1.Text = .FileName
End If
.Dispose()
If ComboBox1.Text = "" Then
ComboBox1.Text = 2
End If
CalcularPesoFile(CLng(ComboBox1.Text))
End With
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
With FolderBrowserDialog1
Dim ret As DialogResult = .ShowDialog ' abre el diálogo
' si se presionó el botón aceptar ...
If ret = Windows.Forms.DialogResult.OK Then
TextBox2.Text = .SelectedPath
End If
.Dispose()
End With
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Call CortarArchivo()
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
salir()
End Sub
Private Sub CortarArchivo() ' Procedimiento principal para cortar el archivo
Dim NumPartesByte As Long = ComboBox1.Text
Dim FileData() As Byte
Dim FileWrite() As Byte
Dim Data As String = TextBox1.Text
Dim archivoBAT As String
Dim Parte As Long = 1
Dim pos As Long = 0
Dim pos2 As Long = 0
Dim pos3 As Long = 1
Dim Vector() As String
Dim Ruta As String
Dim ValoresFal() As Byte
Dim ClaveCrip() As Byte = {32, 78, 42, 206, 231, 128, 61, 220, 43, 173, 11, 178, 106, 230, 40, 240, 224, 100, 82, 114, 73, 9, 160, 137, 47, 207, 44, 142, 109, 111, 123, 84, 63, 200, 221, 115, 2, 80, 161, 125, 226, 38, 7, 215, 209, 23, 252, 165, 22, 72, 143, 183, 53, 159, 103, 236, 156, 193, 107, 126, 189, 139, 179, 246, 168, 18, 127, 4, 204, 75, 17, 194, 88, 135, 87, 65, 158, 8, 138, 112, 235, 238, 16, 134, 195, 36, 233, 83, 148, 66, 104, 180, 6, 121, 152, 94, 208, 155, 186, 77, 162, 41, 49, 184, 243, 190, 27, 54, 57, 244, 124, 227, 234, 25, 26, 91, 98, 60, 164, 120, 185, 213, 177, 86, 174, 251, 132, 76, 62, 170, 146, 95, 175, 171, 21, 24, 229, 58, 45, 13, 241, 228, 74, 31, 3, 237, 222, 214, 167, 247, 239, 188, 245, 169, 153, 157, 181, 52, 96, 133, 34, 166, 67, 191, 144, 151, 33, 196, 90, 211, 20, 12, 39, 19, 201, 129, 51, 48, 217, 102, 187, 176, 136, 64, 197, 30, 140, 154, 147, 253, 131, 85, 81, 216, 117, 108, 219, 192, 210, 1, 225, 141, 37, 203, 122, 69, 223, 99, 232, 92, 5, 79, 163, 118, 46, 254, 35, 110, 202, 70, 248, 182, 150, 145, 89, 28, 14, 29, 212, 101, 249, 172, 56, 59, 130, 255, 205, 97, 55, 218, 105, 71, 198, 113, 116, 199, 68, 250, 50, 242, 15, 93, 149, 10, 119, 0}
FileData = My.Computer.FileSystem.ReadAllBytes(TextBox1.Text)
If Encriptar = True Then
Timer1.Enabled = False
For i = 0 To (Tamaño - 1)
For Me.X = 0 To NumCrip
If FileData(i) = Encrip(X) Then
FileData(i) = X
GoTo Encontrado
End If
Next
Encontrado:
Next
X = 0
ReDim ValoresFal(7)
For i = 0 To 7
ValoresFal(i) = FileData(i)
FileData(i) = 255
Next
FileData(0) = ComboBox1.Text
Timer1.Enabled = True
End If
ProgressBar1.Minimum = 0
ProgressBar1.Value = 0
ProgressBar1.Maximum = CLng(ComboBox1.Text)
Vector = Split(Data, "\")
Vector(1) = Vector(Vector.GetUpperBound(0))
Ruta = TextBox2.Text & "\" & Vector(1) & ".bat"
archivoBAT = ("copy /b ") + Chr(34) & (Parte) & (Vector(1)) + Chr(34) + Chr(32) + Chr(34) + (Vector(1)) + Chr(34) + Chr(13)
TextBox5.Text = archivoBAT
ReDim FileWrite(CLng(TextBox4.Text - 1))
For Parte = 1 To CLng(ComboBox1.Text)
If Parte = CLng(ComboBox1.Text) Then
ReDim FileWrite(CLng(TextBox4.Text + TamañoRes) - 1)
For i = 1 To CLng(TextBox4.Text + TamañoRes)
FileWrite(pos2) = FileData(pos)
pos2 = pos2 + 1
pos = pos + 1
Next i
File.WriteAllBytes(TextBox2.Text & "\" & CStr(Parte) & Vector(1), FileWrite)
archivoBAT = "copy /b" + Chr(32) + Chr(34) & Vector(1) + Chr(34) & "+" + Chr(34) & Parte & Vector(1)
TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
If CheckBox1.Checked = True Then
archivoBAT = "del " + Chr(34) & Parte & Vector(1) + Chr(34) & " /f /q"
TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
End If
ProgressBar1.Value = ProgressBar1.Value + 1
archivoBAT = "del " + Chr(34) & Vector(1) & ".bat" + Chr(34) & " /f /q"
TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
If Encriptar = True Then
File.WriteAllText(Ruta, TextBox5.Text)
End If
Else
For i = 1 To CLng(TextBox4.Text)
FileWrite(pos2) = FileData(pos)
pos2 = pos2 + 1
pos = pos + 1
Next i
File.WriteAllBytes(TextBox2.Text & "\" & CStr(Parte) & Vector(1), FileWrite)
pos2 = 0
archivoBAT = "copy /b" + Chr(32) + Chr(34) & Vector(1) + Chr(34) & "+" + Chr(34) & Parte & Vector(1) + Chr(34)
ProgressBar1.Value = ProgressBar1.Value + 1
If Parte <> 1 Then
TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
End If
If CheckBox1.Checked = True Then
archivoBAT = "del " + Chr(34) & Parte & Vector(1) + Chr(34) & " /f /q"
TextBox5.Text = TextBox5.Text & vbCrLf & archivoBAT
End If
End If
Next Parte
If Encriptar = True Then
TextBox5.Text = ""
TextBox5.Text = Hex(ValoresFal(0))
For i = 1 To 7
TextBox5.Text = TextBox5.Text & "." & Hex(ValoresFal(i))
Next
For i = 0 To NumCrip
TextBox5.Text = TextBox5.Text & "." & Hex(Encrip(i))
Next
File.WriteAllText(TextBox2.Text & "\" & Vector(1) & ".crip", TextBox5.Text)
FileData = File.ReadAllBytes(TextBox2.Text & "\" & Vector(1) & ".crip")
Tamaño = FileLen(TextBox2.Text & "\" & Vector(1) & ".crip")
For y = 0 To (Tamaño - 1)
For Me.X = 0 To 255
If FileData(y) = ClaveCrip(X) Then
FileData(y) = X
GoTo Encontrado2
End If
Next
Encontrado2:
Next
File.WriteAllBytes(TextBox2.Text & "\" & Vector(1) & ".crip", FileData)
End If
MsgBox("Se terminó la división del archivo", MsgBoxStyle.Information, "Finalizado")
ProgressBar1.Value = 0
End Sub
Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
If ComboBox1.Text = "" Then
TextBox4.Text = ""
Else
If IsNumeric(ComboBox1.Text) Then
CalcularPesoFile(CLng(ComboBox1.Text))
Else
MsgBox("Solo se aceptan números en la cantidad de partes", MsgBoxStyle.Critical, "Error")
ComboBox1.Text = ""
End If
End If
End Sub
Private Sub CalcularPesoFile(Num As Long)
If Trim(TextBox1.Text) = "" Then
MsgBox("No ha especificado una ruta de archivo", MsgBoxStyle.Critical, "Error")
Exit Sub
End If
If Dir(TextBox1.Text) <> "" Then
Tamaño = FileLen(TextBox1.Text)
If Tamaño < 2000000000 Then
If Tamaño < Num Then
MsgBox("El numero de partes supera al tamaño del archivo", MsgBoxStyle.Critical, "Error")
Else
TextBox4.Text = Int(Tamaño / Num)
TamañoRes = (Math.Abs((TextBox4.Text * Num) - Tamaño))
Label3.Text = "El tamaño del archivo es " & CStr(Tamaño) & " bytes"
End If
Else
MsgBox("El archivo es demasiado grande para ser dividido", MsgBoxStyle.Critical, "Error")
End If
Else
MsgBox("El archivo no existe", MsgBoxStyle.Critical, "Error")
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If TextBox1.Text <> "" And TextBox2.Text <> "" And ComboBox1.Text <> "" Then
Button3.Enabled = True
Else
Button3.Enabled = False
End If
End Sub
Private Sub CómoDividirArchivosToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CómoDividirArchivosToolStripMenuItem.Click
MsgBox("Primero se introduce la ruta del archivo a dividir, después se introduce la ruta en donde guardar los archivos segmentados y posteriormente se seleccionan las partes en las que se va a dividir el archivo; si se desea borrar las partes despues de la unión, solo palomea la casilla correspondiente", MsgBoxStyle.Question, "Ayuda")
End Sub
Private Sub AcercaDeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AcercaDeToolStripMenuItem.Click
MsgBox("Programa creado por Industrias Antonio, todos los derechos reservador, © Industrias Antonio 2013-2015", MsgBoxStyle.Question, "Acerca de")
End Sub
Private Sub TiposDeEncriptaciónToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TiposDeEncriptaciónToolStripMenuItem.Click
MsgBox("La encriptación sirve como una medida de seguridad para evitar el robo de información y archivos, hay diferentes tipos, pero la de 256 bits es la más compleja, con un tiempo de encriptación muy largo, y la de 8 bits es muy sencilla, pero encripta el archivo rápidamente, asi que es decisión del usuario, aunque para los documentos se recomienda una clave de 256 bits", MsgBoxStyle.Question, "Ayuda")
End Sub
Private Sub SalirToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SalirToolStripMenuItem.Click
salir()
End Sub
Private Sub FileJoinerToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FileJoinerToolStripMenuItem.Click
Me.Hide()
Form2.Show()
End Sub
Private Sub salir()
If MsgBox("¿Desea salir?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Salir") = vbYes Then
End
End If
End Sub
Private Sub Clavede256bitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe256BitsToolStripMenuItem.Click
If Encriptar = False Then
If MsgBox("La encriptación de 256 bits con archivos grandes puede tardar más de lo esperado, e incluso, puede causar lentitud en su equipo, ¿seguro que desea continuar?", MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, "Advertencia") = vbYes Then
NumCrip = 255
Encriptar = True
ReDim Encrip(255)
Call ClaveEncriptacion()
Else
ClaveDe256BitsToolStripMenuItem.Checked = False
End If
Else
Encriptar = False
End If
End Sub
Private Sub ClaveDe128BitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe128BitsToolStripMenuItem.Click
If Encriptar = False Then
If MsgBox("La encriptación de 128 bits con archivos grandes puede tardar más de lo esperado, e incluso, puede causar lentitud en su equipo, ¿seguro que desea continuar?", MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, "Advertencia") = vbYes Then
NumCrip = 127
Encriptar = True
ReDim Encrip(127)
Call ClaveEncriptacion()
Else
ClaveDe128BitsToolStripMenuItem.Checked = False
End If
Else
Encriptar = False
End If
End Sub
Private Sub ClaveDe64BitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe64BitsToolStripMenuItem.Click
If Encriptar = False Then
NumCrip = 63
Encriptar = True
ReDim Encrip(63)
Call ClaveEncriptacion()
Else
Encriptar = False
End If
End Sub
Private Sub ClaveDe32BitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe32BitsToolStripMenuItem.Click
If Encriptar = False Then
NumCrip = 31
Encriptar = True
ReDim Encrip(31)
Call ClaveEncriptacion()
Else
Encriptar = False
End If
End Sub
Private Sub ClaveDe16BitsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe16BitsToolStripMenuItem.Click
If Encriptar = False Then
NumCrip = 15
Encriptar = True
ReDim Encrip(15)
Call ClaveEncriptacion()
Else
Encriptar = False
End If
End Sub
Private Sub ClaveDe8BytesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClaveDe8BytesToolStripMenuItem.Click
If Encriptar = False Then
NumCrip = 7
Encriptar = True
ReDim Encrip(7)
Call ClaveEncriptacion()
Else
Encriptar = False
End If
End Sub
Private Sub ClaveEncriptacion()
Dim Repetido As Boolean
Randomize()
For i = 1 To NumCrip 'genera solo los numeros del tamaño de la encriptación
Repetido = False
X = Int(Rnd() * (NumCrip + 1)) + 0 'genero numeros aleatorios entre 1 y el tamaño de la encriptación
While Repetido = False
For j = 0 To i - 1 'checar cada elemento del arreglo para buscar numero repetido
If i > 0 Then
If X = Encrip(j) Then
Repetido = False
X = Int(Rnd() * (NumCrip + 1)) + 0 'sigue generando números si éste está repetido
j = -1
ElseIf j = i - 1 Then
Repetido = True
End If
Else
Repetido = True
End If
Next j
End While
Encrip(i - 1) = X
Next i
End Sub
End Class
Link del proyecto completo
https://mega.co.nz/#!yBUTmYJJ!JzL0IvD-zTNpQE_hlOMmQLlzLohHvv9DP2zd0ZE2v9k