C# 机器配置是否影响使用protobuf net创建的序列化输出的可访问性?

C# 机器配置是否影响使用protobuf net创建的序列化输出的可访问性?,c#,protobuf-net,C#,Protobuf Net,我正在使用protobuf net来加密、序列化对象的内容并将其存储到文件中,并且在解密并希望将其存储到原始对象中之后使用该文件的内容 该对象可以通过我在创建它的机器上的应用程序进行解密和反序列化,但当完全相同的应用程序在另一台机器上执行时读取完全相同的文件时,它会引发异常,要求我参考有关stackoverflow的现有问题之一。我现在无法发布确切的stacktrace,但很快就会发布 我的问题是——对象序列化和存储到文件中的机器的物理配置是否对其在其他地方的可用性有任何影响 我认为情况不应该是

我正在使用protobuf net来加密、序列化对象的内容并将其存储到文件中,并且在解密并希望将其存储到原始对象中之后使用该文件的内容

该对象可以通过我在创建它的机器上的应用程序进行解密和反序列化,但当完全相同的应用程序在另一台机器上执行时读取完全相同的文件时,它会引发异常,要求我参考有关stackoverflow的现有问题之一。我现在无法发布确切的stacktrace,但很快就会发布

我的问题是——对象序列化和存储到文件中的机器的物理配置是否对其在其他地方的可用性有任何影响

我认为情况不应该是这样,因为这会破坏序列化的目的,而且我的理解存在差距

衷心感谢您的帮助

谢谢

编辑:


谢谢你,马克对于回复和可怕的库本身。我将发回更多关于堆栈跟踪、使用的加密技术以及内容的长度和字节的详细信息。尽管我怀疑加密/解密代码逻辑中是否存在问题,因为同一代码在一台机器上成功创建并使用了该文件。覆盖现有文件也可以排除,因为创建的文件使用guid命名,因此名称不可能重复。请你澄清一下你所说的“在某一点上将文件视为文本”的确切含义是什么

不,不应该对机器配置有任何依赖关系。例如,在常规的.net上序列化数据,然后在windows phone上反序列化,或者在浏览器的unity上反序列化,或者在iOS上通过MonoTouch反序列化,这是完全合理的

那么,我首先关心的是它是否真的是“完全相同的文件”。尤其是解密后的(因为某些加密技术确实使用机器配置,但这与protobuf net无关)

我强烈建议在解密后检查长度和字节(如果长度较大,则使用哈希函数)。常见错误:

  • 加密/解密代码中存在错误
  • 用更少的数据覆盖预先存在的文件,最后留下旧的垃圾(在这种情况下:确保截断文件)
  • 在计算机之间传输文件时发生损坏,例如,在某些点将文件视为文本

如果你有一个可复制的例子(在这里,或者如果你不能在这里公开的话,可以通过电子邮件),也许可以说更多。

谢谢Marc!-对于回复和很棒的库本身。@user1526858如果您不能理解,请告诉我。如果您能够共享一个可复制的示例项目(即,在这里我可以按f5并看到它不起作用),我可能会很快找到问题。完全取决于您。我指的是:您在任何时候使用过编码、UTF8、StreamReader、StreamWriter、GetString之类的东西吗?如果你这样做了:你可能把数据弄糟了。Protobuf数据不是文本。@MarcGravel我会像您上面提到的那样检查文本使用情况并回答……但这会使应用程序按照描述的方式运行吗?即如果数据由于上述原因被破坏,它会在一台机器上引发异常,但在另一台机器上正常运行吗?无论机器是什么,在这两种情况下都会显示相同的问题,对吗?@user156858没有复制,我只能推测;我猜是“传输”步骤被破坏了,因此它在创建文件的机器上工作正常,但尚未传输。@MarcGravel true-我会返回更多详细信息-在此之前它毫无意义-这只会导致猜测。谢谢