You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用EPPlus验证导入Excel文件的工作表保护密码是否一致?

验证EPPlus设置的工作表保护密码

嘿,这个问题我刚好处理过,其实EPPlus里验证工作表保护密码的思路很简单,主要有两种靠谱的方式,我给你拆解一下:

方法一:尝试解锁验证(最直接可靠)

EPPlus的WorksheetProtection类提供了Unprotect方法,你可以直接传入预设的密码"pass",如果密码正确,方法会返回true,反之返回false。这种方式不需要关心底层哈希算法,完全依赖EPPlus官方的验证逻辑,兼容性最好。

代码示例:

using (var package = new ExcelPackage(new FileInfo("导入的文件.xlsx")))
{
    var sheet = package.Workbook.Worksheets.First(); // 获取目标工作表
    bool isPasswordCorrect = false;

    // 先判断工作表是否处于保护状态
    if (sheet.Protection.IsProtected)
    {
        // 尝试用预设密码解锁
        isPasswordCorrect = sheet.Protection.Unprotect("pass");
        
        // 如果验证通过,你可以选择重新保护工作表(如果后续需要保持保护状态)
        if (isPasswordCorrect)
        {
            sheet.Protection.SetPassword("pass");
        }
    }
    else
    {
        // 工作表未被保护,说明不是原文件
        isPasswordCorrect = false;
    }

    if (isPasswordCorrect)
    {
        // 密码验证通过,继续后续导入逻辑
        Console.WriteLine("是原文件,继续处理");
    }
    else
    {
        // 密码错误或未保护,拒绝导入
        Console.WriteLine("不是原文件,拒绝导入");
    }
}

方法二:比对密码哈希值(底层验证)

如果你想更深入一步,EPPlus设置密码时会将密码转换为特定的哈希值存储在工作表中。你可以读取这个哈希值,然后用相同的算法生成"pass"的哈希,再进行比对。不过要注意:不同版本的EPPlus哈希算法可能略有差异,所以这种方式不如第一种通用。

以EPPlus 5.x为例,你可以通过sheet.Protection.ProtectionPassword获取存储的哈希值,然后用EPPlus的ExcelPasswordHasher.HashPassword方法生成"pass"的哈希进行比对:

using (var package = new ExcelPackage(new FileInfo("导入的文件.xlsx")))
{
    var sheet = package.Workbook.Worksheets.First();
    bool isPasswordCorrect = false;

    if (sheet.Protection.IsProtected)
    {
        string storedHash = sheet.Protection.ProtectionPassword;
        string expectedHash = OfficeOpenXml.ExcelPasswordHasher.HashPassword("pass");
        
        isPasswordCorrect = storedHash == expectedHash;
    }

    // 后续判断逻辑和方法一一致
}

注意事项

  • 一定要先判断sheet.Protection.IsProtected,如果工作表未被保护,直接判定为非原文件。
  • 方法一中,解锁后记得重新设置保护(如果你的业务需要保持工作表保护状态)。
  • 不同版本的EPPlus可能在保护API上有细微调整,建议你根据自己使用的EPPlus版本调整代码。

内容的提问来源于stack exchange,提问作者espada grimmer

火山引擎 最新活动