今天我发现自己试图像这样创建一个JSON文档:
{
'a' : 1,
'b' : 2,
'hash' : (some hash value),
}
hash
的值是JSON文档本身的哈希值。显然,这并不容易,因为哈希函数的值会改变文档的哈希值。我很确定有更好的方法来做我想做的事情,但只是为了笑容,老实说我很好奇是否有办法做到这一点。
那么有什么方法可以将哈希设置为SHA1 / MD5(或者实际上任何常见的哈希/指纹识别函数),使其等于结果文档的哈希值?
答案 0 :(得分:2)
还存在等效JSON文档的问题。在大多数情况下,例如文件:
{'a':1,'b':2}
和
{'b':2,'a':1}
是等价的,但它们的字符串可能会产生不同的哈希值。这表明在应用哈希函数之前需要将等效文档规范化为相同的表单。
JSON文档中出现另一个问题,即使用值'hash'(或包含哈希的键)来表示其他内容,例如:
{'a':1,'hash':'this is not a hash'}
这样的文档如何包含散列,而不是使用散列键的不同名称?实际上,似乎不可能。
答案 1 :(得分:1)
我使用内置哈希构建的任何文档总是从计算中排除哈希本身。例如,在构建文本文件时,第一行或最后一行是哈希值,文件的其余部分是哈希值,如:
B23128AB
SomeTextHere
SomeMoreText
其中Hash(“SomeTextHere \ r \ nSomeMoreText \ r \ n”)= B23128AB
我希望你可能需要为你的JSON对象做同样的事情。
这仍然是安全的,因为如果哈希值或其他内容被破坏(无关紧要),那么验证例程将失败。
答案 2 :(得分:1)
这与找到加密安全哈希函数的原像非常密切相关,因此,我认为你可能要做的最好的事情就是尝试基于暴力的攻击(开始猜测哈希值并检查)是否f(xhy)= h穷尽直到你找到一个与你的x和y一起工作或者证明不存在的h。)