读取文件签名并区分 zip 文件和 docx 文件之间的区别

2023-12-27

我有一个上传例程,我将前几个字节读入数组并将其转换为十六进制字符串以获取文件签名。

我一直在将前 4 个字节读入数组,一切似乎都很顺利,直到我遇到了 .zip 文件和 .docx 文件的问题。它们的前 4 个字节具有相同的签名:“50-4b-03-04”。

所以我查看了下一个字节,对于 .docx,它是“14”,但它也在一些 .zip 文件上。我查找了这个文件签名,发现这个序列适用于很多文件类型,包括 JAR、ZIP、DOCX、XSLX 和 Open Office 文档。

有谁知道有什么好方法来读取文件签名并准确确定文件类型吗? Windows 如何知道其中的差异?它必须不仅仅是前 4 个字节。我希望读取文件上传的文件签名,以确保只允许上传批准的文件类型。


我所做的是将文件签名放入数据库中,放入文件类型的签名长度和扩展名。如果文件没有扩展名,则不会上传。如果文件扩展名已从签名更改,则例程将拒绝该文件。以下是例程中提取签名并进行比较的代码:

using var fileStream = file.OpenReadStream();
var signature = _context.FileSignatures.Select(f => new { f.FileSignature, f.AllowedFileType.FileExtension, f.SignatureLength })
                                       .Where(x => x.FileExtension == fileType);

byte[] bytes = new byte[signature.Max(x => x.SignatureLength)];
fileStream.Read(bytes, 0, signature.Max(x => x.SignatureLength));

string hexData = BitConverter.ToString(bytes);
var foundFile = await signature.FirstAsync(x => x.FileSignature == hexData);

return foundFile.FileExtension;

文件签名存储在表中,如下所示:

File Extension           FileSignature        SignatureLength
.PDF                     25-50-44-46          4

这样我可以确保读取签名的最大字节数并获取扩展名。如果我想包含更多文件,我只需将它们添加到数据库中即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取文件签名并区分 zip 文件和 docx 文件之间的区别 的相关文章

  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • Android:如何将解码器集成到多媒体框架

    最近我成功地将视频解码器移植到Android 还将输出转储到 SurfaceView 上并使用本机 API 检查输出 现在下一个任务是实现播放 暂停 流媒体等 即媒体播放器的其他功能 这样做将需要返工 因为所有这些功能都已在 Android
  • Lisp中函数参数是如何存储的?

    我假设传递给 Lisp 函数的值被分配给与参数名称匹配的引号 然而 令我惊讶的是 defun test x print eval x test 5 不起作用 变量 x 未绑定 因此 如果参数在函数中不存储为符号 那么本例中的 x 到底是什么
  • 使用数组调用 vararg 函数?

    在下面的示例中 我想将数组的内容传递给接收可变数量参数的函数 换句话说 我想传递给printf的内容foo按值传递这些参数 从而将这些参数传递到堆栈上 include
  • 如何使用 scikit-learn 从线性判别分析中获取特征向量

    如何从 scikit learn 线性判别分析对象中获取变化基矩阵 对于数组X有形状m x p m样品和p特征 和N类 缩放矩阵有p行和N 1列 该矩阵可用于将数据从原始空间变换到线性子空间 艾莉亚回答后编辑 让我们考虑以下示例 from
  • 如何检查是否跨浏览器兼容? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的小问题是是否有一个在线工具可以检查您的 html css 和 jQuery 页面是否跨浏览器兼容 我有一个带有 jquery 的简单淡
  • SH 脚本根据文件名将文件从一个目录移动到另一个目录

    我正在尝试编写一个 sh 脚本 该脚本将在我的其中一个下载完成时运行 它应该在 Downloads 上查找特定的文件名 并根据文件名将其移动到不同的目录 IE 我已经下载了 欢乐合唱团 的最后一集 文件名是 glee some trash
  • 如何仅列出将提交的文件?

    有什么方法可以获取当我键入以下内容时将提交的文件列表 git commit m my changes git status 列出太多 我可以去掉所有的词 但我不愿意 我不想被告知有关未跟踪文件的信息 我试过了 git ls files md
  • 如何在 ASP.NET MVC 中实现分页?

    目前 我正在使用许多博客文章中找到的策略 基本上 URL 包含页码 例如 Users List 5 将为您提供分页用户列表第 5 页上的用户 但是 我没有遇到一个页面必须列出两个单独的分页列表的情况 我该如何使用 ASP NET MVC 来
  • 如果我在 Bootstrap 3 中使用 .container-fluid,这是否意味着我需要使用网格类?

    我读过一些关于什么的答案 container and container fluid是 但我缺少的很简单 如果我使用 container fluid 我是否使用 col xs 6 col md 9 等列类 resize 和 containe
  • iOS 上的 ZBar 内存泄漏?

    我对 ZBar 扫描性能非常满意 但是如果这很重要的话 我在 ARC 下运行的项目上遇到了一个大问题 也就是说 似乎存在严重的内存泄漏 并且随着 readerView 的每次新显示 该泄漏呈指数级上升 在大约 10 倍的内存使用量开始呈指数
  • Deno 允许所有权限

    我经常发现自己在使用 Deno 时至少输入两到三个权限选项 deno run allow net allow read allow env app ts 有一种方法可以逃避显式权限 您可以使用 allow all或短选项 A允许所有权限 请
  • 删除与 ember-data 关联的模型

    我有两个模型 App User DS Model create comments DS hasMany App Comment App Comment DS Model create user DS belongsTo App User 当
  • 我如何在Python中获取Postgresql中的数据库列表

    我想获取所有数据库的列表Postgresqlpython 列表中的服务器 基本上我想在另一个数据库中创建它们 但我无法得到它 这就是我尝试过的 config read host psql 002 database tesdb user pg
  • Inno Setup 循环遍历文件并注册每个 .NET dll

    我正在使用 Inno Setup 创建一个安装文件 其中我需要使用 regasm exe 文件注册未知数量的 net dll 我知道我可以使用以下代码来注册 net dll Run Filename dotnet20 RegAsm exe
  • 通过 j2me 应用程序发送电子邮件

    我正在使用 j2me lwuit 构建应用程序 我需要从该应用程序发送电子邮件 为了使您的应用程序更小 我建议通过SocketConnection 对于小型电子邮件 这应该非常简单 SocketConnection connection S
  • 作为页面登录时 Facebook Like 按钮“中断”

    我的页面上有一个 Facebook 的 赞 按钮 并且运行良好 但是 当访问者作为 Facebook 的 页面 登录时 它会包含一张照片并破坏了我的设计 我想这是因为主页不允许点赞 我几乎有一个像这样的 iframe http develo
  • 如何将逗号分隔值的字符串解析为haskell中的字符串列表?

    所以如果我有一个字符串 this is a story all about how 到其中的单词列表中 this is a story all about how 作为 ReadP String 的实例 我尝试了很多不同的方法 其中之一是
  • 匹配此 JSON 进行反序列化的模型,带有破折号的字段名称

    我正在尝试创建一个与此 JSON 结构的 JSON NET 反序列化相匹配的模型 第一项 190374 vid 190374 canonical vid 190374 portal id 62515 is contact true prof
  • 本地 JavaScript - 写入本地文件

    我有一些从本地 HTML 文件加载的 JavaScript 代码 无需通过网络服务器 即使用打开file 有没有办法可以使用此文件中的 JavaScript 代码写入本地文件 我知道跨站点限制不允许JavaScript中的很多东西 但这不是
  • 读取文件签名并区分 zip 文件和 docx 文件之间的区别

    我有一个上传例程 我将前几个字节读入数组并将其转换为十六进制字符串以获取文件签名 我一直在将前 4 个字节读入数组 一切似乎都很顺利 直到我遇到了 zip 文件和 docx 文件的问题 它们的前 4 个字节具有相同的签名 50 4b 03