You need to enable JavaScript to run this app. 浏览器端使用Javascript检测上传的PST等文件是否为密码保护状态
优惠活动
大模型
产品
解决方案
定价
更多

浏览器端使用Javascript检测上传的PST等文件是否为密码保护状态

浏览器端通过JS检测PST文件是否加密的实现方案

结论

可以实现,不需要上传文件到服务端,仅通过解析PST文件头部的固定标识就能完成判断,性能开销极低,适合前端预校验场景。

实现原理

PST是微软Outlook专属的邮件数据存储格式,其文件头部固定位置存储了加密状态标识:

  • 偏移量0x1A00位置的4个字节为加密类型字段,值为0代表文件未加密,非0值则代表已启用密码保护
  • 仅需要读取文件前7KB(7168字节)的内容即可获取该标识,不需要解析整个PST文件

核心实现代码

// 检测PST是否加密的工具函数
async function isPstProtected(file) {
  // 仅截取头部足够覆盖标识位的内容,减少性能消耗
  const headerSlice = file.slice(0, 7168);
  const buffer = await headerSlice.arrayBuffer();
  const dataView = new DataView(buffer);
  // PST文件采用小端序存储,读取0x1A00位置的32位无符号整数
  const encryptFlag = dataView.getUint32(0x1A00, true);
  return encryptFlag !== 0;
}

// 绑定上传事件调用
const uploadInput = document.querySelector('input[type="file"]');
uploadInput.addEventListener('change', async (e) => {
  const targetFile = e.target.files[0];
  if (!targetFile?.name.toLowerCase().endsWith('.pst')) return;
  
  const hasPassword = await isPstProtected(targetFile);
  console.log('是否加密:', hasPassword);
  if (hasPassword) {
    // 触发你的加密提示逻辑
  }
})

注意事项

  • 该方案仅能判断文件是否启用了密码保护,无法校验密码正确性,也无法破解加密内容
  • 仅对微软标准格式的ANSI、Unicode PST文件有效,部分第三方工具生成的非标PST可能存在识别误差

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 09:06:05