我从一个文件(xls,csv,xml)导入一些数据,这将导致一个复杂的内存中对象图。现在我需要知道这个图表是否自从它被导出后就被修改过了。什么是安全的方法来检查这个?我想我会输出一个哈希码与文件?如果那样the standard way of generating an object's hashcode就够了?我应该如何生成哈希?我宁愿在对象图上而不是在实际的流/文件上生成哈希。生成一个对象图的安全哈希码
回答
最后我做了以下(至极似乎工作得很好):
- 创建一个自定义的整数哈希代码包括使用this algorithm单个对象的所有简单属性。
- 重复1.所有复杂的对象,这个对象在一个众所周知的顺序
- 创建此流的MD5校验引用
- 连载所有的整数哈希码成一个二进制流
您可以确保没有人通过加密或使用散列码来更改您的数据。如果您提到的基于文本的格式会丢失可读性,所以我认为您更喜欢使用hashcode。
如果标准哈希方法可以大量应用,取决于您认为什么是“安全”:如果您只是想确保在存储/传输数据时没有硬件错误,或者您想要检测到简单更改某个不知道自己在做什么的人,如果你确定你使用了一个好的GetHashCode()函数,那可能会很好。如果你想保护数据免受“攻击者”的攻击,我不会依赖32位“自制”哈希。 (特别是如果“攻击者”可能知道代码,例如在开源项目中)。
在这种情况下,我更喜欢更强大的散列函数,如MD5(不是非常安全)或更好的SHA-2。这些工作对字节流你必须散列数据(XML等)本身或者.net序列化的数据(这使得散列独立于文件的数据格式)。 .net为这些算法提供了类,例如参见http://msdn.microsoft.com/de-de/library/system.security.cryptography.hmacsha256.aspx
您问题的标准解决方案不是对图形进行散列。通常你只是跟踪发生变化的时间/时间。
您可以使用HasChanged
标志,但我不喜欢那样。我通常使用版本计数器,每次更改都会增加。然后,当保存到文件时,我会存储版本计数器的当前值,并检查是否有更改,我将旧版本计数器与当前版本进行比较。
我无法追踪更改,因为这些更改是在我的软件之外完成的。数据被导出(csv,XML,excel),(可能)编辑,然后再次导入。 – bitbonk 2011-03-20 21:25:27
- 1. 生成对象的哈希代码
- 2. *如何能成为一个安全的哈希密码?
- 3. 密码哈希安全
- 4. 在.net中生成基于对象标识的哈希码
- 5. 一致地生成对象的哈希值
- 6. 哪个哈希算法对密码最安全?
- 7. CakePHP - 验证哈希密码不同于安全::哈希()
- 8. 用Qt生成一个MD5哈希值
- 9. 春季安全密码哈希+盐
- 10. 安全地存储密码哈希django
- 11. Javascript密码哈希发送不安全
- 12. .NET中包含哪些哈希算法对于密码哈希足够安全?
- 13. 生成MD5哈希
- 14. 生成值范围的哈希码
- 15. 最快的哈希码生成器.NET
- 16. 如何为这个类写一个哈希码生成器?
- 17. 如何生成一个随机盐的哈希密码
- 18. 为BitArray生成一个好的哈希码(GetHashCode)
- 19. 如何在PHP中安全地生成SSHA256或SSHA512哈希值?
- 20. Sha1哈希多个sha1哈希 - >安全以识别文件?
- 21. 安全哈希方法
- 22. Firebase安全和哈希
- 23. IntelliJ IDEA如何生成哈希码?
- 24. Rfc2898DeriveBytes与Sha2哈希密码生成
- 25. 的Rails:生成哈希
- 26. Python哈希函数和哈希对象
- 27. 生成哈希查找表的对象的索引阵列
- 28. 生成url的唯一哈希键
- 29. 生成用户唯一的哈希
- 30. C++ 11 std ::哈希函数对象类线程安全
我只是简单地想以快速可靠的方式检测对实际数据的更改(用户添加项目,更改属性值等)。所以我想知道这是否足够可靠:http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode – bitbonk 2011-03-15 13:54:45
有一个捕获所有2个问题 - 因为任何人都可以更改数据,所以检查'数据'是否相同的唯一方法是检查每一个信息的每一位,或者计算双方的散列并比较散列。而且,由于对可能发生变化的数据计算散列意味着您必须读取所有数据,因此不直接比较数据的意义何在? – 2011-03-21 21:18:13
因为我没有原始数据。一旦它被导出,它可以在本地删除。当我稍后导入时,我仍然需要能够判断数据是否已更改。这就是为什么原始哈希将与导出的文件一起保存,然后我在稍后导入时可以用来验证数据。 – bitbonk 2011-07-18 13:58:11