Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 计算a";基于;数据校验和。(SHA1/2等)_C_Cryptography_Checksum_Data Integrity_Sha - Fatal编程技术网

C 计算a";基于;数据校验和。(SHA1/2等)

C 计算a";基于;数据校验和。(SHA1/2等),c,cryptography,checksum,data-integrity,sha,C,Cryptography,Checksum,Data Integrity,Sha,我不知道该怎么问这个问题,但这是我希望的,考虑到一个可能包含5+n键的结构(因此,我的系统必须有5个键,额外的键是可选的)-我想要一个哈希机制,能够确定6键哈希,具有5相同的键,是5键结构的超集,并提供附加信息。特别是一种散列机制,因为存在一些限制,阻止在每次请求时通过连线发送完整的结构 为了澄清,这里有一些信息(示例需要2+n键): 用SHA-512和-256散列,结果如下所示: SHA-512 04fe500f2b3e779aba9ecb171224a04d35cc8453eb1521c7e

我不知道该怎么问这个问题,但这是我希望的,考虑到一个可能包含
5+n
键的结构(因此,我的系统必须有5个键,额外的键是可选的)-我想要一个哈希机制,能够确定
6
键哈希,具有
5
相同的键,是
5
键结构的超集,并提供附加信息。特别是一种散列机制,因为存在一些限制,阻止在每次请求时通过连线发送完整的结构

为了澄清,这里有一些信息(示例需要
2+n
键):

SHA-512
-256
散列,结果如下所示:

SHA-512
04fe500f2b3e779aba9ecb171224a04d35cc8453eb1521c7e31fd48b56b1cce9
b1e8af775e177e110982bfb16a6ca8652d7d9812ab8a8c316015dc9d6b3b54f7

SHA-256
4833be7086726e7ffd82db206f94f0a4f9fdf7fba00692f626157afed4587c74
当添加一个额外的键(下面的例子)时,我希望能够推断扩展数据集是第一个键的超集

---
  name: codebeaker
  occupation: developer
  telephone: 49 (0) 123 45 67
然而,毫不奇怪,在
MD5
SHA-n
和我研究过的任何其他哈希函数中,都没有办法做到这一点,例如:

SHA-512
2fe2c1f01e39506010ea104581b737f95db6b6f71b1497788afc80a4abe26ab0
fc4913054278af69a89c152406579b7b00c3d4eb881982393a1ace83aeb7b6a2

SHA-256
77c2942e9095e55e13c548e5ef1f874396bfb64f7653e4794d6d91d0d3a168e2
(显然)没有相似之处

我们的用例,即格式化为结构的数据,由第三方送入我们的系统。处理数据非常昂贵,每次操作花费2-3秒,如果我们知道之前运行的结果,我们可以收回大约50%的时间,但是-贝叶斯和Levenstein文本差异算法不适用于此,因为我们经常看到首字母缩写的键/值对,以及其他看起来类似的文本,完全无关的时候


我们需要的是一种校验和数据的方法(我可能会在这里对我的响应进行偏移),这样我们就可以确定
B
a
的超集,如果它包含所有相同的键,具有相同的数据。然而,在我们的
struc
中,键/值项中往往有太多数据,因此每次通过线路发送数据,只是为了确定我们已经看到了一个更完整的副本,这将是昂贵和浪费的。

一个想法是对每个键-值对使用不同的哈希。因此,完整结构的“散列”是散列的集合

如果您的用例始终是五个相同顺序的键,然后是任何其他键,那么您可以使用一个哈希值作为强制键,一个哈希值作为可选键,但是您将无法检测到一个包含可选键的结构是另一个包含可选键的结构的超集

一个微小的变化是对所需的键使用一个散列,对整个结构使用一个散列


您还可以(根据您的要求)对键值对使用较小的校验和,以便能够快速丢弃不相同的内容,但仍然需要较大的哈希值来更准确地确定某个内容是否匹配。

加密哈希值专门设计有以下属性:

  • 它们是单向函数。实际上,为给定的哈希值重新计算特定输入是不可行的,甚至任何散列到此值的随机输入也是不可行的
  • 虽然由于输入大小远大于固定的输出大小,因此必须存在冲突,但实际上也不可能找到导致相同哈希值的两个不同输入值
  • 完全相同的输入值总是散列为完全相同的散列值
  • 输入中的任何微小更改都会导致完全不同的哈希值。翻转任何单个输入位会使输出位平均改变50%
因此,加密散列可以并且实际上被用作任何二进制数据的唯一标识符。甚至“name:codebeaker”的哈希值也与“name:codebeaker”的哈希值不同

如果您的密钥集是固定的,以固定的顺序,始终是完整的,并且仅由新密钥扩展,并且每个密钥只有一个允许的表示形式,那么您可以计算五个旧密钥的哈希值,并将其与当前密钥集的现有哈希值进行比较

如果键总是唯一的,但集合可以混合,则可以为每个键计算单独的哈希,并在单独的数据库中存储和搜索这些现有集合

除此之外,加密哈希可能不是该作业的正确工具

[编辑]


另一种方法是首先按字母顺序对键进行排序,然后从已排序的集中获取哈希值。现在,它可以识别您的集合,而无需关心订单。更实际的做法可能是首先获取单个键的单个散列,对散列进行排序,然后将散列置于已排序的散列列表之上。这仍然需要uniques键。

这些“键”是否已知并已修复?如果不是的话,比如说,使用(姓名、职业、电话)三元组,您必须创建3个可能的超集进行比较(姓名、职业、(姓名、电话)、(职业、电话)。如果提供的密钥数量与所需的密钥数量之间存在更大的差距,那么组合的数量可能会激增。我在Twitter上链接了这一点,有人指出标记
crypto
可能是一个错误,我之所以给它加上标签,是因为我记得一些关于能够以编程方式确定一个键是否派生自另一个键的事情,这就是我希望在这里做的,除了我们谈论的是结构的文本表示,而不是键(但在这个上下文中它们有什么不同?@Damien_不相信者,键是已知的,大多数情况下——假设现在可能有10个已知密钥,5个强制密钥(如上所述),并且可能有多达15个允许系统在其生命周期内增长和更改。对于具有其他已知键的部件,API的语义版本控制用于控制允许的字段。e、 g.v1.3允许比v1.2更多的键。其中v0.9客户端不允许使用1.0 API,因为它们不提供所有5个(必需)密钥。API格式当前为JSON,但可以更改。(我们写信给客户
SHA-512
2fe2c1f01e39506010ea104581b737f95db6b6f71b1497788afc80a4abe26ab0
fc4913054278af69a89c152406579b7b00c3d4eb881982393a1ace83aeb7b6a2

SHA-256
77c2942e9095e55e13c548e5ef1f874396bfb64f7653e4794d6d91d0d3a168e2