原始浮点编码

2024-03-03

Update原来的问题不再是这个问题的适当问题,所以我将单独保留这个问题来演示我尝试/学到的内容和背景。很明显,这不仅仅是一个“Base64 变体”,而且涉及更多一些。

背景:我使用 python 3.x 进行编程主要是为了与开源程序 Blender 一起使用。我是一名新手/业余级程序员,但我对大概念了解得相当好 我已阅读与我的问题相关的这些文章。

  • 维基百科上的 Base64 http://en.wikipedia.org/wiki/Base64
  • Base64 可以让你被捕 (pdf) http://www.sans.org/reading-room/whitepapers/auditing/base64-pwned-33759
  • 堆栈溢出讨论 https://stackoverflow.com/questions/4070693/why-base64-encryption
  • 其他一些

Problem:我有一个二进制文件,其中包含与每个顶点(浮点数)的 x、y、z 坐标相对应的 3d 网格数据(浮点数列表和整数列表)以及构成网格面的顶点索引(整数) 。该文件以 xml 的方式组织......

<SomeFieldLabel and header like info>**thensomedatabetween**</SomeFieldLabel>

这是“顶点”字段中的示例

<Vertices vertex_count="42816" base64_encoded_bytes="513792" check_value="4133547451">685506bytes of b64 encoded data
</Vertices>
  1. "之间有685506个字节的数据Vertices" and "/顶点"
  2. 这些字节仅包含 a-a、A-Z、0-9 和 +,/(这是 base64 的标准)
  3. 当我抓取这些字节并在 python 中使用标准 base64decode 时,我得到 513792 字节
  4. 如果 vertex_count="42816" 可信,则每个顶点应该需要 42816*12bytes 来表示 x,y,z。 42816*12 = 513792。非常好。
  5. 现在,如果我尝试将解码后的字节解压为 32 位浮点数,我会得到垃圾……所以有些东西是 ammis。

我认为某个地方有一个额外的加密步骤。也许有一个转换表、旋转密码或某种流密码?奇怪的是,字节数是正确的,但结果却不是,这应该限制可能性。有任何想法吗?以下是两个文件扩展名更改为 *.mesh 的示例文件。我不想公开这种文件格式,只是想为 Blender 编写一个导入器,这样我就可以使用这些模型。

这是两个示例文件。我从 Vertices 和 Facets 字段中提取了原始二进制文件(不是 b64 解码的),并从公司提供的此类文件的“查看器”中提供了边界框信息。
示例文件1

  • 未修改的文件 http://dl.dropbox.com/u/2586482/Mesh%20Data%20Demo/model2.mesh
  • 顶点二进制: http://dl.dropbox.com/u/2586482/Mesh%20Data%20Demo/model2_base64vertices.data
  • 面二进制: http://dl.dropbox.com/u/2586482/Mesh%20Data%20Demo/model2_base64faces.data
  • 解密数据: http://dl.dropbox.com/u/2586482/decrypted%20data.zip这是一个 .zip,包含解密的顶点字段和解密的面字段(分别为 mesh2.vertices 和 mesh2.faces)。它还包含一个 .stl 网格文件,可以在许多应用程序中查看/打开。

示例文件2

  • 未修改的文件 http://dl.dropbox.com/u/2586482/Mesh%20Data%20Demo/model3.mesh
  • 顶点二进制: http://dl.dropbox.com/u/2586482/Mesh%20Data%20Demo/model3_base64vertices.data
  • 面二进制: http://dl.dropbox.com/u/2586482/Mesh%20Data%20Demo/model3_base64faces.data
  • 边界框:最小值[-4.6, -40.3, -7.3] 最大值[7.5, -23.1, 2.6]

关于“顶点”字段的注释

  • 标头指定 vertex_count
  • 标头指定 base64_encoded_bytes,它是进行 base64 编码之前的字节数
  • 标头指定了一个“check_value”,其重要性尚未确定
  • 字段中的数据仅包含标准的base64字符
  • 标准 Base64 解码后,输出数据具有...长度 = vertex_count*12 = base64_encoded_bytes。 b64 输出中偶尔会有 4 个额外字节? -编码/解码字节的比率是4/3,这也是典型的base64

有关 Facets 字段的注释

  • 标头指定一个facet_count
  • 标头 base64_encoded_bytes 是进行 base64 编码之前的字节数

  • base64_encoded_bytes/facet_count 的比率似乎变化很大 少量。从1.1到大约1.2。如果他们 被编码为对应于顶点索引的 3x4 字节整数。 因此,要么压缩该字段,要么保存模型三角条 http://en.wikipedia.org/wiki/Triangle_strip, 或两者 :-/

更多窥探
我打开了公司提供的viewer.exe(在十六进制编辑器中)来查看这些文件(也是我获取边界框信息的地方)。以下是一些我觉得有趣并且可以进一步搜索的片段。

f_LicenseClient...Ì[电子邮件受保护] /cdn-cgi/l/email-protection[电子邮件受保护] /cdn-cgi/l/email-protection[电子邮件受保护] /cdn-cgi/l/email-protection[电子邮件受保护] /cdn-cgi/l/email-protection_bLoadXXXXXX内部加密...¼[电子邮件受保护] /cdn-cgi/l/email-protection_strSiteKey....í†......

在LoadXXXXXXInternalEncrypted和SaveXXXXXXInternalEncrypted中,我用XX屏蔽了公司名称。看起来除了简单的 Base64 表变体之外,我们肯定还有一些加密。

SaveEncryptedModelToStream.................自...pUx....模型...ˆàC....流....

对我来说,这看起来像是关于如何保存加密模型的函数定义。

DefaultEncryptionMethod¼!@........ÿ.......€...€ÿÿ.DefaultEncryptionKey€–†....ÿ...ÿ.......€... .ÿÿ.DefaultInincludeModelData –†....ÿ...ÿ.......€...€ÿÿ.DefaultVersion.@

啊……现在这很有趣。默认加密密钥。请注意,每个描述符之间有 27 个字节,并且它们始终以“ÿÿ”结尾。这里是 24 个字节,不包括“ÿÿ”。对我来说,这是一个 192 位密钥……但谁知道所有 24 个字节是否都对应于该密钥?有什么想法吗?

80 96 86 00 18 00 00 FF 18 00 00 FF 01 00 00 00 00 00 00 80 01 00 00 00

代码片段
为了节省该线程的空间,我将此脚本放入我的投递箱中以供下载。它读取字段,从顶点和面字段中提取基本信息,并打印出一堆内容。您可以取消注释末尾,使其将数据块保存到单独的文件中,以便于分析。
basic_mesh_read.py http://dl.dropbox.com/u/2586482/Mesh%20Data%20Demo/basic_mesh_read.py

这是我用来尝试标准 Base64 库的所有“合理”变体的代码。try_all_b64_tables.py http://dl.dropbox.com/u/2586482/mesh%20data%20demo/try_all_b64_tables.py


我不知道为什么你认为结果不是浮点数。您提供的“解密数据”中的顶点数据包含前 4 个字节“f2 01 31 41”。给定 LSB 字节顺序,对应于位模式“413101f2”,它是浮点值 11.062973 的 IEEE 754 表示形式。该文件中的所有 4 字节值都在同一范围内,因此我假设它们都是浮点值。

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

原始浮点编码 的相关文章

随机推荐

  • 如何在 PythonAnywhere 上部署 web2py?

    我如何启动并运行一个基本的 web2py 服务器Python无处不在 http www pythonanywhere com 更新 29 05 我们现在在网络选项卡上有一个大按钮 可以为您完成所有这些操作 只需点击它说的地方Web2Py 填
  • 在C#中,子类继承基类的“using”指令吗?

    假设我们有一个基类Rectangle和一个派生类Square namespace Shapes using System Foo public class Rectangle public Rectangle int l int w nam
  • 防止 Firestore 规则中的重复条目不起作用

    我尝试使用 Google Firestore 规则防止重复条目 但它不起作用 我正在尝试的规则是 service cloud firestore Prevent duplicate messages match databases data
  • 使用 Adob​​e Flex Builder 构建 iOS 应用程序 - 性能问题

    我正在使用 Adob e Flex builder 构建一个 iOS 应用程序 并使用 Adob e 的工具将其编译为 ipa 通过初步测试 我发现最终结果并不像本机代码那样丰富 也不那么快速或流畅 不要简单地说 为什么不直接使用 Obje
  • @PostFilter 和 @PreFilter 在 Spring Security 中如何工作?

    作为 Spring 安全注释的新手 我需要对以下代码进行澄清 PostFilter hasPermission filterObject READ or hasRole ROLE ADMIN public List
  • CDI 适用于常规 Java 应用程序吗?

    我有一个简单的 Maven 项目 包含三个类 在我的META INF我有我的空beans xml 每次我运行我的Main java我得到一个NullPointerException Exception in thread main java
  • 删除的 zip 文件会导致 e.Data.GetData("FileContents") 引发异常

    我正在尝试在 WPF 应用程序中为从 zip 存档中拖动的文件实现一个处理程序 处理程序应获取文件内容以进行进一步处理 我的环境 Windows7 安装7 zip Visual Studio 2012 Express Net 4 5 下面是
  • CakePHP 多重选择“选定”不起作用

    我的编辑表单中有一个多重选择输入 当回声时 selected变量将如下所示 MySQL PHP 但是 输入不会自动选择与标签匹配的选项 但是 当我手动输入所选选项时 它会自动选择这两个选项 例如
  • 亚马逊AWS通过Java API创建EBS(弹性块存储)

    我正在尝试找到一种方法来创建新的 EBS 并通过 AWSJavaSDK 以语法方式将其附加到正在运行的实例程序 我看到了使用命令行工具和基于休息的调用来做到这一点的方法 但没有办法通过正确的 SDK 你应该能够使用创建卷 http docs
  • Azure AD 与 sonarqube 集成

    我使用 nginx 反向代理在 https 上运行 sonarqube 这是我的 nginx 反向代理配置 server server name sonarqube mydomain co in access log var log ngi
  • ASP.net 模型视图演示器值得花时间吗?

    我这个周末正在阅读有关 ASP net MVP 模式的内容 似乎即使是最简单的任务也会花费太多精力 如果以 MVP 模式进行 回报似乎是在更大的项目中 但我想 如果我将会追随MVP 为什么不直接用 ASP net MVC 来做这个项目呢 我
  • 如果是 Chrome,请使用 WebP

    因为目前只有 Chrome 和 Opera 支持 WebP 所以我想知道是否可以针对这两个特定浏览器并将它们重定向以获取我网站的另一个版本 以便我可以帮助更快地优化我的网站下载速度 Thanks 我这样解决了这个问题 检查客户端是否在 Ac
  • 同时显示选项卡栏和列表操作栏。 (安卓蜂巢)

    有一种情况 我想在操作栏中同时使用选项卡栏和列表导航 文档说 我们可以将 Actionbar 置于列表导航模式或选项卡导航模式 有没有办法同时使用两者 任何指示 帮助 先感谢您 抱歉 您只能选择其中之一 话虽这么说 你可以使用android
  • Select2 4.0.x 多复选框 JS 插件

    我正在使用Select2控制与Select2 Multi checkboxes JS插件允许多复选框选择 以下演示显示该控件可以正常工作选择2 3 x http jsfiddle net wasikuss gx93rwnk http jsf
  • 如何以编程方式检查 iPhone 中是否安装了应用程序列表

    在我的应用程序中 我显示了应用程序列表 是否有可能发现 iPhone 中是否安装了应用程序数组 如果有可能 请有人快速提供相关代码来检查 iPhone 中是否安装了一系列应用程序 在过去你可以使用canOpenURL像这样的图书馆iHasA
  • .net 8 预览版 Linux 上托管的 Azure 应用服务无法启动,显然要求安装 8.0.0-rc

    最后 App Service 可以在 Linux 容器下的 NET 8 Preview 上运行 尚不支持 Windows 我创建了一个并部署了一个简单的应用程序 但容器没有启动 如下所示 2023 09 17T20 25 27 314076
  • Google 应用内支付:如何处理 Google 的回发 JWT

    也许这是一个愚蠢的问题 但我不是高级程序员 我有 已成功为我的应用程序设置应用内付款 但它只能工作 不使用回发 url 我已经在谷歌上搜索了很多个小时 试图自己解决这个问题 但没有 成功 希望有人能帮助我 我已经包含了脚本 处理发布数据这显
  • 创建模型时使用外键自动创建模型 - Django

    我正在我的网页上创建评论部分 并希望用户能够对评论投赞成票或反对票 我的模型是这样的 class Comment models Model owner models ForeignKey User body models TextField
  • Windows attrib 命令行程序不会删除只读属性?

    我使用 windows attrib 命令删除目录只读属性并将其设置回来 如下所示 attrib r C build attrib C build C build attrib r C build attrib C build R C bu
  • 原始浮点编码

    Update原来的问题不再是这个问题的适当问题 所以我将单独保留这个问题来演示我尝试 学到的内容和背景 很明显 这不仅仅是一个 Base64 变体 而且涉及更多一些 背景 我使用 python 3 x 进行编程主要是为了与开源程序 Blen