是否有可能计算字符串的哈希值,如果它包含该哈希值



今天我发现自己试图创建这样一个JSON文档:

{
    'a' : 1,
    'b' : 2,
    'hash' : (some hash value),
}

其中hash的值是JSON文档本身的哈希值。显然,这并不容易,因为哈希函数的值会改变文档的哈希值。我很确定有更好的方法来做我正在做的事情,但只是为了笑,我真的很好奇是否有任何方法可以做到这一点。

那么,我是否可以将哈希值设置为SHA1/MD5(或任何常见的哈希/指纹函数),使其等于结果文档的哈希值?

同样存在等价JSON文档的问题。在大多数情况下,例如文档:

{'a':1,'b':2}

{'b':2,'a':1}

是等价的,但是它们的字符串可能产生不同的哈希值。这表明在应用哈希函数之前,需要将等效文档规范化为相同的形式。

另一个问题发生在JSON文档中,使用值"hash"(或包含hash的键)来表示其他内容,例如:

{'a':1,'hash':'this is not a hash'}

这样的文档如何包含散列,除了使用不同的名称作为散列键吗?事实上,这似乎是不可能的。

我用内置散列构建的任何文档总是从计算中排除散列本身。例如,在构建文本文件时,第一行或最后一行是散列值,文件的其余部分是散列值,如:

B23128AB
SomeTextHere
SomeMoreText

where Hash("SomeTextHerernSomeMoreTextrn") = B23128AB

我希望你可能需要为你的JSON对象做相同类型的事情。

这仍然是安全的,因为如果哈希值或其他内容损坏(无论哪一个),那么验证例程将失败。

这与寻找加密安全哈希函数的原映像非常密切相关,因此,我认为您可能要做的最好的事情是尝试基于暴力的攻击(开始猜测哈希值h并仔细检查f(xhy) = h,直到找到与x和y一起工作的h或证明不存在)。

最新更新