为 API 调用选择哈希函数以确定何时更新
Choosing a hash function for API call to determine when to update
上下文:
在我们的应用程序设计中,对于某些经常使用的 APIs,响应会很大(~3-5MB)。例如,API 调用以获取 1000 个用户的所有配置文件。
此外,通常情况下,响应将保持相对不变 - 不变。我们希望将前端store(如redux-store)中的信息保存为一个JSON对象,当FE调用BE获取信息时,我们会传入一个计算好的checksum作为hash JSON 对象的值 - 假设使用 MD5 函数。 BE 也会使用 MD5 计算哈希值中的响应。如果哈希值不同,BE 只会 return 响应。否则,它将 return 类似于 HTTP.status.OK
我想知道最适合这种操作的散列函数是什么,选择一个的标准是什么?从我搜索的内容来看,似乎没有全局答案。确实应该很快,但是我觉得计算一个哈希值的时间和其他数据库操作相比是可以忽略不计的。此外,碰撞的可能性也可以忽略不计。
任何具有低冲突概率的散列函数都适用于此应用程序。您没有使用哈希来保护您的数据不被修改。
话虽如此,出于 code-reviewer 和老板的原因,您应该避免使用 MD5。它不再有利于安全,有些人不喜欢看到它在任何新代码中使用。
SHA2-224 在性能、安全性和老板满意度方面应该没问题。
上下文:
在我们的应用程序设计中,对于某些经常使用的 APIs,响应会很大(~3-5MB)。例如,API 调用以获取 1000 个用户的所有配置文件。
此外,通常情况下,响应将保持相对不变 - 不变。我们希望将前端store(如redux-store)中的信息保存为一个JSON对象,当FE调用BE获取信息时,我们会传入一个计算好的checksum作为hash JSON 对象的值 - 假设使用 MD5 函数。 BE 也会使用 MD5 计算哈希值中的响应。如果哈希值不同,BE 只会 return 响应。否则,它将 return 类似于 HTTP.status.OK
我想知道最适合这种操作的散列函数是什么,选择一个的标准是什么?从我搜索的内容来看,似乎没有全局答案。确实应该很快,但是我觉得计算一个哈希值的时间和其他数据库操作相比是可以忽略不计的。此外,碰撞的可能性也可以忽略不计。
任何具有低冲突概率的散列函数都适用于此应用程序。您没有使用哈希来保护您的数据不被修改。
话虽如此,出于 code-reviewer 和老板的原因,您应该避免使用 MD5。它不再有利于安全,有些人不喜欢看到它在任何新代码中使用。
SHA2-224 在性能、安全性和老板满意度方面应该没问题。