每次在Excel 2007中打开Excel 2003二进制格式时,MD5哈希更改(6个字节随机更改)

时间:2011-12-16 18:30:29

标签: md5 excel-2003

我遇到了一个生产问题,其中两个MD5哈希值在Excel 2003二进制文件的服务器版本(由Syncfusion .NET库生成)与本地二进制文件之间不匹配。 当我上传仅通过双击通过Windows资源管理器打开的本地Excel文件时,服务器发现MD5哈希值不同,并且不允许文件上载。 只需用Excel 2007打开Excel 2003文件(有些报告与Excel 2003相同) 将导致在文件开头更改几个字节(我想在文件开头的Excel元数据中)

确认我使用了CMD控制台的文件比较程序:

fc.exe /b ExcelFile2003binary_Opened.xls ExcelFile2003binary.xls

这是从偏移0000046C开始的两个文件之间的区别:

0000046C: D0 E0
0000046D: 61 51
0000046E: 5D 5E
0000046F: B6 FE
00000470: 76 0E
00000471: BB BC

中间列显示打开文件的6个字节:D0615DB676BB,每次打开文件时都会更改这些字节。由于未打开ExcelFile2003binary.xls,因此最后一列不会更改。

基于[MS -OSHARED]Office Common Data Types and Objects Structure Specification document 受影响的字节位于偏移0000046C(2字节)和0000046E(4字节),每次打开文件时都会发生变化,这显然会改变MD5哈希值。

LinkElement-3示例 这是一个linkElement示例,它说明了包含该链接的文档之外的Web资源的超链接。

Offset      Size     Structure                     Value
------------------------------------------------------------
0000046A    006C     VtHyperlink - linkElement-3
0000046A    0008     TypedPropertyValue - dwHash   
0000046A    0002     WORD - wType                  0x0003
0000046C    0002     WORD - padding                0x0000
0000046E    0004     DWORD - value                 0x00320064

如果我理解得很好,“填充”和“价值”总是会改变。 我从其他帖子中听到Excel 2007根本不会更改Excel 2007二进制格式。

请帮忙。这是我需要解决的紧急问题。我可以在Excel文档上设置(使用Syncfusion或Excel API)来防止这种行为吗?

谢谢, 弧度

编辑:


Dim xlsUri As Uri
xlsUri = New Uri("c:\temp\ExcelFile2003binary.xls")

If (IO.File.Exists(xlsUri.LocalPath)) Then
  Dim xlsNode As TreeNode = wip.getWipNode(tvwMain.Nodes, "Excel")
  If (xlsNode Is Nothing) Then
    'Opening excel file link Uri embeded in Tag won't change the file????
    'Users can choose any way to open it (Custom app or Windows Explorer shell)
    folderNode.Nodes.Add("excel", "Excel", 9, 9).Tag = xlsUri.LocalPath
  End If
End If

1 个答案:

答案 0 :(得分:0)

我发现这与元数据有关,但这只发生在excel 2003文件上(对于word文件没有问题等)。

我找到了解决这个问题的方法。

  1. 打开excel 2003(.xls)文件
  2. 点击左上角的办公室按钮
  3. 选择准备 - >检查文件。检查
  4. 删除所有文档属性和个人信息。
  5. 然后在保存并关闭文件后,只需打开和关闭文件,MD5哈希就不会改变。