通过硬件编号实现文件加密:仅指定电脑可用!

chengsenw 项目开发评论2阅读模式

通过硬件编号实现文件加密:仅指定电脑可用!

通过硬件编号实现文件加密:仅指定电脑可用!
如果我们有自己的私密文件,不希望其中的数据资料被其他人看到,不妨通过VBA将文件与自己的电脑绑定,即便文件不小心流失出去,别人也无法查看。
与电脑绑定的方法,就是用自己电脑中的某个硬件的固定标志或编码来作为打开文件的钥匙,打开文件时首先在电脑中查找这把钥匙,能找到就可以打开,否则不允许打开。
此前分享了如何获取电脑硬件的方法:
VBA硬件信息获取系列(11):综合实战(一键生成电脑主要硬件的清单)
也分享了利用这些硬件信息来方便为电脑升级的方法:
老牛奋蹄:借力AI,为旧电脑升个级!
今天,同样要用到这些方法,来获取某个硬件的固定信息,比如网卡的Mac地址。此前分享过获取网卡信息的方法,代码如下:
Function 获取网卡信息() As StringOn Error Resume NextDim objWMIService As Object, colItems As Object, objItem As ObjectDim infoStr As String, i As Integer    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True"): i = 1    For Each objItem In colItems        infoStr = infoStr & "网卡" & i & "名称:" & IIf(IsNull(objItem.Description), "未知", objItem.Description) & vbCrLf        infoStr = infoStr & "网卡" & i & "MAC地址:" & IIf(IsNull(objItem.MacAddress), "未知", objItem.MacAddress) & vbCrLf        infoStr = infoStr & "网卡" & i & "IP地址:" & IIf(IsNull(objItem.IPAddress), "未知"Join(objItem.IPAddress",")) & vbCrLf        i = i + 1    Next    Set objWMIService = NothingSet colItems = Nothing    获取网卡信息 = infoStrEnd Function
通过硬件编号实现文件加密:仅指定电脑可用!
这样可以获取到网卡的综合信息,但是,今天不需要知道全部内容,只需要其中的Mac地址即可,因此,对代码作一些调整和精简:
Function GetMac() As StringDim objItem As Object    On Error Resume Next    For Each objItem In GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") _        .ExecQuery("SELECT MacAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True")        GetMac = objItem.MacAddress        If Len(GetMac) > 0 Then Exit For    Next    Debug.Print GetMacEnd Function
运行代码,就可以在立即窗口中得到本电脑的Mac地址了:
通过硬件编号实现文件加密:仅指定电脑可用!
记下这个地址,然后在工作簿的打开事件中编写代码:
Private Sub Workbook_Open()  If GetMac <> "94:C6:91:71:D9:BB" Then    MsgBox "对不起,文件不能在这台电脑中使用!", vbCritical, "提醒"    ThisWorkbook.Close False  End IfEnd Sub
这样,只要电脑中的Mac地址也指定的地址不一样,打开的文件就会自动退出。当然,不仅可以退出,还可以让它“自杀”以绝后患通过硬件编号实现文件加密:仅指定电脑可用!。代码修改如下:
Private Sub Workbook_Open()  If GetMac <> "94:C6:91:71:D9:BB" Then    MsgBox "对不起,文件不能在这台电脑中使用!", vbCritical, "提醒"    With ThisWorkbook      .Saved = True      .ChangeFileAccess xlReadOnly      Kill .fullName      .Close    End With  End IfEnd Sub
这样,即便文件被别人拷走,打开文件时就会因为识别不到指定的Mac地址,而自动退出,并删除文件。
当然,现在还有一个缺陷:如果打开文件时不选择“启用宏”,这些功能就完全无效了。为了防止这一点,在工作簿中增加一个无关紧要的工作表,比如一个命名为“提醒”的空表;然后在工作簿的退出事件中写入下面的代码:
Private Sub Workbook_BeforeClose(Cancel As Boolean)Dim sht As Worksheet  ThisWorkbook.Sheets("提醒").Visible = xlSheetVisible  For Each sht In ThisWorkbook.Sheets    If sht.Name <> "提醒" Then sht.Visible = xlSheetVeryHidden  Next shtEnd Sub
将打开事件中的代码修改如下:
Private Sub Workbook_Open()  If GetMac <> "94:C6:91:71:D9:BB" Then    MsgBox "对不起,文件不能在这台电脑中使用!", vbCritical, "提醒"    With ThisWorkbook      .Saved = True      .ChangeFileAccess xlReadOnly      Kill .fullName      .Close    End With  End If  Call showallshtEnd SubSub showallsht()Dim sht As Worksheet  For Each sht In ThisWorkbook.Sheets    sht.Visible = xlSheetVisible  Next sht  ThisWorkbook.Sheets("提醒").Visible = xlSheetVeryHiddenEnd Sub
这样,当文件退出时,会仅显示“提醒”表,而自动隐藏其他的所有表格。这样,再打开文件时,如果不启用宏,就只能看到“提醒”表格而无法看到其他表格;如果启用宏,但不是指定电脑,文件就会自动退出并删除文件;只有启用宏,并且是指定的电脑,就会仅隐藏“提醒”表格而显示其他的所有表格。
通过硬件编号实现文件加密:仅指定电脑可用!
郑重提醒世上没有绝对的安全,任何安全措施都是相对的。文中介绍的方法仅供学习交流,请不作为重要资料的唯一安全保障!
通过硬件编号实现文件加密:仅指定电脑可用!

 
chengsenw
  • 本文由 chengsenw 发表于 2026年2月15日 15:13:44
  • 转载请务必保留本文链接:https://www.gewo168.com/11182.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: