在日常办公与实验数据处理过程中,Excel 几乎成为必备工具。大量敏感数据直接堆积在工作表内,数据安全问题自然成为用户重点关注的对象。本文结合了几种常见的 Excel 加密方案,从实现原理到具体操作进行逐一拆解,并对安全性能做出对比分析,希望能为存在类似困惑的朋友提供实用的参考。

一、实现过程
1. 基于Excel自身的加密
Excel 文件由工作簿组成,而工作簿又包含若干张工作表。因此,Excel 自身提供了两条防护线:工作表保护与工作簿保护。
(1)工作表保护
操作路径:点击“工具” → “保护” → “保护工作表”,设定密码即可启用。该功能既能防止自己因误操作而修改内容,也能阻止他人未经授权的改动。但需要注意:非法用户虽然无法修改内容,却依然可以浏览数据。如果希望在保护状态下允许某些特定区域被编辑,可以在保护前设置“单元格格式”→“保护”,勾选“锁定”或“隐藏”复选框。取消锁定的区域在保护后仍可编辑;勾选隐藏则可使公式在保护后不被显示。
(2)工作簿保护
点击“工具” → “保护” → “保护工作簿”,可设置密码以保护工作簿的结构与窗口。保护“结构”意味着无法移动、删除、隐藏、取消隐藏或重命名工作表,也不能插入新工作表。保护“窗口”则能在打开工作簿时固定窗口的位置和尺寸。
然而,上述两种方法都有同样的短板:保护后文件内容仍然可见。它们更多是为管理员提供的防误操作辅助工具,难以有效阻挡数据泄露。
(3)文件口令保护
点击“工具” → “选项” → “安全性”,可以设置打开权限密码或修改权限密码。设置打开权限密码后,只有输入正确密码才能打开文件,内容自然无法被查看。设置修改权限密码后,即便输入了打开密码,还需要提供修改密码;若仅授予查看权限,则只能以只读方式打开。需要注意的是:以只读方式打开后若做了修改,系统会提示另存文件,另存后的新文件其修改密码自动失效,但打开密码依然有效。
2. 基于Excel文件的加密
由于上述方法无法阻止用户查看文件内容,直接对整个文件进行加密是更为彻底的解决方式。原理相对简单:整个系统由加密模块 encrypt 和解密模块 decrypt 组成。加密时,命令格式为:encrypt excel 文件名;解密时:decrypt excel 文件名。
加密原理:原始内容为 M,随机选定密钥 P,M 与 P 进行异或运算得到密文 C(即 C = M ⊕ P)。解密则是密文与同一密钥异或回到原始内容(M = C ⊕ P)。更巧妙的是,对加密后的文件再执行一次加密就能还原原始文件,因此只需一个加密模块即可。
核心代码如下:
#include
#include
void main(int argc, char *argv[])
{
if (argc != 3) exit(0);
FILE *fp1, *fp2;
if ((fp1 = fopen(argv[1], "rb")) == NULL) {
printf("Cannot open the file\n");
exit(0);
}
fp2 = fopen(argv[2], "wb");
int ch;
while (!feof(fp1)) {
ch = fgetc(fp1);
if (ch != EOF) {
ch ^= 32; // 示例密钥,实际可根据需求随机生成
fputc(ch, fp2);
}
}
fclose(fp1);
fclose(fp2);
}
(注:原文代码中缺少变量定义和读写细节,此处按常见写法补全示意,实际使用时需根据密钥算法进行调整。)
3. 基于单元格的加密
实际工作中,我们往往没必要把整个文件都锁定。例如职工工资表,只需对“应发工资”这类隐私数据加密,而姓名、性别、籍贯等公开信息则无需保护。此时将加密粒度细化到单元格级别,既更灵活,也更安全。
通过 VBA 编程可实现单元格加密。例如,要对“应发工资”列(假设为 E 列)的第 2 至第 10 行加密,代码如下:
Sub encrypt_pay()
Dim i As Integer
For i = 2 To 10 '加密数据所在范围
Range("E" & Format(i)) = Range("A" & Format(i)) Xor 32
Next
End Sub
执行后,非法用户看到的只是一堆无意义数据。需要查看时,再次执行即可解密。其他敏感信息的加密方法同理,不再赘述。
下一步,我们还可以进一步设计更加安全、更便于用户操作的整合方案。
参考文献:[2] 谭浩强. C程序设计. 清华大学出版社,1999.
