吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6705|回复: 30
收起左侧

[其他原创] [VB]自动加密压缩目录下所有文件,并生成对应的密码记录文件

  [复制链接]
Vjmms 发表于 2019-4-28 09:40
应该有现成的、功能强大的类似工具,所以这就是一个小玩具级别的东西,见笑了。

〇、几点说明

这段代码本是悬赏求助区应助写的,那位兄弟没要求提供源码,所以就放在这边当成个新手贴了,如有违规,请版主删贴。
这个小玩具的特点就是简单,几步操作就可以完成目录下所有子目录、文件的单独加密压缩,并自动生成密码文件备忘。
没有写任何异常处理代码,所以这段程序的鲁棒性是存疑的。

压缩工具使用的是7-ZIP的免安装版,调用压缩命令的格式是这样的:
7za.exe a -tzip -p密码 压缩包文件名.zip 待压缩文件


一、操作步骤:
1、选择待压缩的文件目录。
2、选择压缩包存放目录。
3、点击开始按钮,等待完成。

二、关键代码:
调用7-ZIP的代码
[Visual Basic] 纯文本查看 复制代码
     Sub ZipFile(ByVal sourceDir As String, ByVal destDir As String, ByVal fileName As String, ByRef sPassword As String)
        sPassword = GeneratePassword()
        Dim proc As System.Diagnostics.Process = New System.Diagnostics.Process()
        proc.EnableRaisingEvents = False
        proc.StartInfo.FileName = SevenZipExe
        proc.StartInfo.Arguments = ZipArgs & sPassword & " " & destDir + fileName & ".zip " & sourceDir + fileName
        proc.Start()
        proc.WaitForExit()
    End Sub


生成32个字符随机密码的代码
[Visual Basic] 纯文本查看 复制代码
    Function GeneratePassword() As String
        Dim sChars As String = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+=[]{}\|;:./<>?"
        Dim sPassword As String = ""
        For i = 1 To 32
            Dim n As Integer
            Randomize(DateTime.Now.ToOADate)
            n = Int(Rnd() * (sChars.Length - 1)) + 1
            sPassword += Microsoft.VisualBasic.Mid(sChars, n, 1)
        Next
        Return sPassword
    End Function

后面要将密码保存为csv格式的文件,因此密码里不包含英文逗号。

选择带压缩文件目录、压缩包保存目录代码
[Visual Basic] 纯文本查看 复制代码
    Private Function SelectFolder(ByVal Describe As String, Optional ByVal ShowNewFolder As Boolean = True) As String
        Using nOpen As New System.Windows.Forms.FolderBrowserDialog()
            nOpen.Description = Describe
            nOpen.ShowNewFolderButton = ShowNewFolder
            nOpen.ShowDialog()
            Return nOpen.SelectedPath
        End Using
    End Function

    Private Sub ButtonChooseFilesPath_Click(sender As Object, e As EventArgs) Handles ButtonChooseFilesPath.Click
        selectedFilesPath = SelectFolder("请选择待压缩文件路径", True)
        If Microsoft.VisualBasic.Right(selectedFilesPath, 1) <> "\" Then
            selectedFilesPath += "\"
        End If
        TextBoxFilesPath.Text = selectedFilesPath

    End Sub
    Private Sub ButtonChooseSavePath_Click(sender As Object, e As EventArgs) Handles ButtonChooseSavePath.Click
        selectedSavePath = SelectFolder("请选择压缩包存放路径", True)
        If Microsoft.VisualBasic.Right(selectedSavePath, 1) <> "\" Then
            selectedSavePath += "\"
        End If
        TextBoxSavePath.Text = selectedSavePath
    End Sub


获取目录下所有子目录、文件名的代码
[Visual Basic] 纯文本查看 复制代码
    Sub GetAllFoldNames(ByVal currentPath As String, ByRef queueFoldNames As Queue(Of String))
        Dim sFold As String
        sFold = Dir(currentPath, FileAttribute.Directory)
        Do While (sFold <> "")
            If (sFold <> "." And sFold <> "..") Then
                'If (GetAttr(currentPath + sFold) And vbDirectory) Then
                queueFoldNames.Enqueue(sFold)
                TextBoxLog.Text += "  " + sFold + Chr(13) + Chr(10)
                'End If
            End If
            sFold = Dir()
        Loop
    End Sub


生成密码文件代码
[Visual Basic] 纯文本查看 复制代码
    Sub GeneratePasswordFile(ByVal fileNameWithPassword As String)
        Dim path As String = Application.StartupPath()
        If Microsoft.VisualBasic.Right(path, 1) <> "\" Then
            path += "\"
        End If
        Dim strDate As String = Format(Date.Now, "General Date")
        strDate = strDate.Replace("/", "-")
        strDate = strDate.Replace(":", "-")
        Dim fileName As String = path + "Password_" + strDate + ".csv"
        fileNameWithPassword = "文件,密码" + Chr(13) + Chr(10) + fileNameWithPassword
        FileOpen(1, fileName, OpenMode.Output)
        Print(1, fileNameWithPassword)
        FileClose(1)
        TextBoxLog.Text += Chr(13) + Chr(10) + "密码已保存至文件:" + fileName + Chr(13) + Chr(10)
    End Sub


四、源码下载

源码中带有编译好的文件及7-ZIP免安装版(在Release目录中)
链接:https://pan.baidu.com/s/13vljpJn3EJhm4sFIs1gOSw
提取码:fjr8


五、运行截图


190427.png

免费评分

参与人数 4吾爱币 +6 热心值 +4 收起 理由
苏浅沫 + 1 + 1 谢谢@Thanks!
emin199 + 1 + 1 谢谢@Thanks!
ll018213 + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

visuns 发表于 2021-3-16 18:55
上面所有链接都失效了,能重新分享一次吗?感谢感谢。
苏浅沫 发表于 2020-4-19 12:01
大佬,我用过之后有一个小点希望提建议给您
压缩软件是自动收集文件后缀的
而压缩完的文件的文件名希望能够设置成没有文件后缀的
QQ截图20200419115314.jpg

如图,源文件的文件名被自动抓取了,所以生成的文件就变成了“源文件名+.源文件后缀+.zip”--希望大佬可以优化下不自动抓取源文件后缀的自动压缩软件,辛苦大佬了~
QQ图片20200419115628.png

ll018213 发表于 2019-4-28 17:23
 楼主| Vjmms 发表于 2019-4-28 18:07
ll018213 发表于 2019-4-28 17:23
win7旗舰版运行报错

错误信息是?
ll018213 发表于 2019-4-28 22:02

捕获.PNG
qxk器械科 发表于 2019-4-28 22:20
你好,我在下载的源码,csproj, cs 等文件的源码怎么才能编 成exe文件,直接用啊,谢谢。。。真不会,告诉下用哪个软件也行啊。
 楼主| Vjmms 发表于 2019-4-28 22:37

看上去像是跑错了程序,没找到 7za.exe文件
运行 AutoZip_190427\AutoZip_190427\bin\Release 目录下的“自动压缩.exe”试试。

或者把 Release 目录下的 7z1900-extra 目录拷贝到与可执行程序相同目录下。
 楼主| Vjmms 发表于 2019-4-28 22:40
qxk器械科 发表于 2019-4-28 22:20
你好,我在下载的源码,csproj, cs 等文件的源码怎么才能编 成exe文件,直接用啊,谢谢。。。真不会,告诉 ...

你说的是用 C# 开发的项目,我这个源码是用的 VB 开发的。
现在的VS版本做的项目,一般会有一个 sln 后缀的解决方案文件,你用 VS 打开这个文件,编译解决方案就可以。

可能你需要去找本 C# 开发的书或教学录像来看看。
qxk器械科 发表于 2019-4-28 22:55
Vjmms 发表于 2019-4-28 22:40
你说的是用 C# 开发的项目,我这个源码是用的 VB 开发的。
现在的VS版本做的项目,一般会有一个 sln 后 ...

谢谢,我知道怎么做了。
ll018213 发表于 2019-4-28 23:28
Vjmms 发表于 2019-4-28 22:37
看上去像是跑错了程序,没找到 7za.exe文件
运行 AutoZip_190427\AutoZip_190427\bin\Release 目录下的 ...

可以用了,就是不知道能不能用指定某个密码压缩
 楼主| Vjmms 发表于 2019-4-28 23:38
ll018213 发表于 2019-4-28 23:28
可以用了,就是不知道能不能用指定某个密码压缩

原来的需求是要求密码随机。

你可以修改源程序。在生成密码那个地方,改成指定的密码。或者在界面上增加一个文本框,用于指定密码。

你若需要,我顺手帮你改一下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-16 03:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表