首页 > 解决方案 > 具有不同字符串的校验和返回相同的输出

问题描述

谁能解释为什么这个语句返回相同的输出?

SELECT CHECKSUM('2019-03-14 00:15:32')
SELECT CHECKSUM('2019-03-13 00:15:42') 

输出:

843611027

标签: sqlsql-server

解决方案


我不会具体回答这个问题,但更一般地是就校验和过程的实用性而言。

有几种不同的校验和算法,质量参差不齐。最基本的校验和(如您展示的校验和)运行速度非常快,但冲突率很高(两个不同的字符串可能具有相同的输出)。

如果您需要对低碰撞率非常有信心,请使用“加密安全”校验和算法,该算法已在数学上被证明具有非常低的碰撞率。一个很好的例子是 SHA256。

基本校验和适用于错误检测(即机器是否正确读取信用卡号或条形码),但不适用于篡改检测(即是否有人弄乱了这条重要信息)或识别(这是正确的密码)。


推荐阅读