sql - 具有不同字符串的校验和返回相同的输出
问题描述
谁能解释为什么这个语句返回相同的输出?
SELECT CHECKSUM('2019-03-14 00:15:32')
SELECT CHECKSUM('2019-03-13 00:15:42')
输出:
843611027
解决方案
我不会具体回答这个问题,但更一般地是就校验和过程的实用性而言。
有几种不同的校验和算法,质量参差不齐。最基本的校验和(如您展示的校验和)运行速度非常快,但冲突率很高(两个不同的字符串可能具有相同的输出)。
如果您需要对低碰撞率非常有信心,请使用“加密安全”校验和算法,该算法已在数学上被证明具有非常低的碰撞率。一个很好的例子是 SHA256。
基本校验和适用于错误检测(即机器是否正确读取信用卡号或条形码),但不适用于篡改检测(即是否有人弄乱了这条重要信息)或识别(这是正确的密码)。
推荐阅读
- docker - 所有 docker 镜像都需要基础镜像吗?
- r - aggregate daily values to monthly for each pixel in a polygon using google earth engine
- python - Correct Way to Fine-Tune/Train HuggingFace's Model from scratch (PyTorch)
- javascript - 在 Google Colab 上,来自 Javascript 的 localhost 访问失败
- java - Refactor my Java code to replace attribute access to getters and setters
- azure-web-app-service - 为静态 Web 应用程序购买域名
- sql-server - Azure 链接表需要防火墙规则?
- ajax - 如何使用 AJAX 调用 AWS Lambda 函数?
- python - 将每日 txt 文件发送到特定路径/目录
- bazel - 在 bazel 方面的实现中,有没有办法获取工作区根目录的绝对文件系统路径?