我对这个领域并不熟悉,所以如果这个问题看似微不足道或无聊,请原谅。
我有N个字符串,我需要以这种方式签名,如果签名仍然有效 最多可更改,删除或添加M个字符串。 N> M,N可能会有所不同。签名不应允许从签名本身中推断出N.
到目前为止,我所能想到的是一种直接的方法,分别为每个字符串构建哈希值,并将它们全部存储为签名,但它不符合最新要求。
如果存在某些特定于语言的示例,请同时提及它们, - Java,C ++,PHP等都可以。
答案 0 :(得分:0)
经过一番调查后,我发现了以下可能有用的信息。
有一个所谓的“Rolling hashes”。另一个密切相关的技术名称为“Context Triggered Piecewise Hashes”(CTPH)。关于CTPH有一篇易于理解的文章: Identifying almost identical files using context triggered piecewise hashing
我认为它可用于签署N个元素,在单个输入文件中连接。
该算法假设块大小(用于定期拼接由传统哈希构建的签名)是公知的,因为它嵌入到最终签名中。这可能允许推断签名内容的近似大小,但显然保密N.
对于给定的未知内容,算法根据CTPH提供相似性度量或同源性,作为已知签名内容与之间的0(差异)和100(身份)之间的值。使用签名的未知内容。