- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图快速确定两组时间表是否相同,并生成一个 key ,这些独特的时间表可以作为引用。我最初尝试使用 HASHBYTES,但很快发现您只能对 8000 个字符进行哈希处理,而且我有大量的日期时间,这些时间在连接时长于 8000。
所以,我尝试使用 Checksum 和 Checksum_Agg,因为它们似乎是为这类事情设计的。我知道校验和生成非唯一值的可能性更高。但是我需要将这些进行相互比较的范围/上下文是如此狭窄,我认为我可以逃脱它。
不幸的是,经过一些测试后,我了解到我可以在仅 4 行日期时间数据中找到校验和“冲突”!我觉得这有点奇怪,并发现了碰撞的模式。
下面是一个演示问题的示例脚本:
声明@Rows 表
(
[GroupId] INT,
[开始日期] 日期时间,
[结束日期] 日期时间
)
--Group1
插入 @Rows 值 (1, '2013-01-20 01:00:00.000', '2013-01-20 01:20:00.000')
插入@Rows 值 (1, '2013-01-20 01:20:00.000', '2013-01-20 01:40:00.000')
--INSERT INTO @Rows 值 (1, '2013-01-20 01:40:00.000', '2013-01-20 02:00:00.000')
--INSERT INTO @Rows 值 (1, '2013-01-20 02:00:00.000', '2013-01-20 02:20:00.000')
--INSERT INTO @Rows 值 (1, '2013-01-20 02:20:00.000', '2013-01-20 02:40:00.000')
--INSERT INTO @Rows 值 (1, '2013-01-20 02:40:00.000', '2013-01-20 03:00:00.000')
--Group2
插入@Rows 值 (2, '2013-01-21 01:00:00.000', '2013-01-21 01:20:00.000')
插入 @Rows 值 (2, '2013-01-21 01:20:00.000', '2013-01-21 01:40:00.000')
--INSERT INTO @Rows 值 (2, '2013-01-21 01:40:00.000', '2013-01-21 02:00:00.000')
--INSERT INTO @Rows 值 (2, '2013-01-21 02:00:00.000', '2013-01-21 02:20:00.000')
--INSERT INTO @Rows 值 (2, '2013-01-21 02:20:00.000', '2013-01-21 02:40:00.000')
--INSERT INTO @Rows 值 (2, '2013-01-21 02:40:00.000', '2013-01-21 03:00:00.000')
SELECT [ChecksumAgg1] = CHECKSUM_AGG([CheckSum])
发件人
(
SELECT [CheckSum] = CHECKSUM([StartDate], [EndDate])
从@Rows
哪里 GroupId = 1
) G1
SELECT [ChecksumAgg2] = CHECKSUM_AGG([CheckSum])
发件人
(
SELECT [CheckSum] = CHECKSUM([StartDate], [EndDate])
从@Rows
哪里 GroupId = 2
) G2
结果是:
ChecksumAgg1: 5681728
ChecksumAgg2: 5681728
这两个系列日期之间的唯一区别是它们相隔 1 天。但它们生成相同的校验和!但仅当存在 时偶数行。如果您取消注释来自组 1 的插入和来自组 2 的插入,您将获得两个不同的校验和。但是然后取消评论另一对,您将获得另一场比赛!
最后我有两个问题。我很想更多地了解它是如何工作的,以及为什么这种模式似乎会影响一个非常可预测的校验和值。更重要的是,我想知道是否有更好的方法来从本质上创建一个非常大的数据集的“指纹”。我知道我不能保证这个哈希是全局唯一的,但我显然需要比校验和更好的东西。
我能够对校验和计算进行某种技巧的一种方法是在日期时间上执行 HASHBYTES,然后将其提供给校验和函数。通过这种方式,校验和被馈送的值比具有相似外观差异的一组日期更加随机。但这就足够了吗?
编辑 - 这里只是更多的上下文。
基本上我有一个系统,它有大量的时间表数据和一个单独的系统,它在特定时间对这些时间表感兴趣。例如,多个用户可能会看到这个复杂时间表部分的特定版本,并希望添加一些元数据(可能是他们的批准状态、注释或其他内容)。如果某些外部来源对任何单个日期时间进行了更改,则需要断开此链接,因为它不再是相同的时间表!
有许多不同的系统可以对核心计划数据进行更改,这就是为什么我很难将这种关注提升到代码级别,以某种方式管理并将其“规范化”为以某种方式表示每个快照的实体。我将不得不在 100 万个地方使用 Hook 来监听更改,然后清理指向日程表的任何内容。
最佳答案
来自此页面的评论:
http://msdn.microsoft.com/en-us/library/ms188920.aspx
Checksum_Agg 似乎是使用 XOR 构建的。关于 XOR 的事情是,通过两次包含相同的数字,它们往往很容易可逆。这解释了为什么您只在偶数时才注意到它。
只要您知道 XOR 问题并以混合所有位的方式预先加扰您提供给它的内容,您就应该没问题。
关于sql-server - 为什么这些 Datetime 值返回相同的 Checksum & Checksum_Agg?我怎样才能让它更独特?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450415/
我一直在分析一些 230V 通信并试图找出协议(protocol)的校验和算法。从我了解到的通信结构如下: 第一个 block 总是相同的,必须是某种开始结构(910hex) 然后嵌套5个 block
我们正在通过 Phonegap 构建安卓混合应用程序。使用 PayTm 网络集成工具包。 正确生成校验和。但是,当提交表单进行付款时,会返回 **Invalid Checksum ** 问题。 最佳答
在运行金字塔配方时,以下在 chef-solo 中失败: =======================================================================
我正在尝试使用此处描述的3个步骤-http://www.javaworld.com/community/node/3968创建一个自定义Maven存储库。因此,我遵循了所有步骤,并在这里有了存储库:
我想在现有的角度应用程序中安装最新的 Electron 版本,因此我按照npm命令进行安装。 命令:npm i electron@latest 预期行为 Electron 应成功安装。 实际行为 因此
我有一个警报系统,我已将其配置为通过以太网向我的手机发送 SMS 消息。 这是我收到的一些短信: 5522 18 1137 00 003 1C76 5522 18 3137 00 003 3278 5
如果给定代码 + CRC 字符串,如何计算 CRC 算法? 我有几个由代码 + 匹配的 CRC 组成的字符串,但不知道如何计算有问题的 CRC,以便我可以生成更多的代码字符串。以下是一些示例(16 位
我是一名电子工程师,并没有发现从纯数学角度考虑 CRC 很重要。但是,我有以下问题: 为什么我们在计算 CRC 时要在消息中添加 n 个零,n 是生成多项式的次数吗?我在模2长除法以及CRC的硬件实现
假设我最后有一些带有 16 位校验和的数据包。我想猜测使用了哪种校验和算法。 首先,从转储数据中,我可以看到数据包有效负载中的一个字节变化完全改变了校验和,所以我可以假设它不是某种简单的异或或求和。
从 Internet 下载各种可执行文件或 zip 文件时,我从未使用过校验和。我知道它用于检查一致性并增加一点安全性。但是,当您从 Apache 或 Microsoft 等受人尊敬的项目下载时,有必
我有短的、可变长度的十进制数字,例如:#41551,它们是由人类手动转录的。输入错误会导致不良结果,所以我的第一个想法是使用 Luhn 算法添加校验和 - #41551-3。然而,这只会检测到错误,而
我正在寻找一种校验和算法,其中对于大数据 block ,校验和等于所有较小组成 block 的校验和之和。我发现的大部分内容都来自 RFC 1624/1141,它们确实提供了此功能。有人对这些校验和技
我有一个关于如何计算互联网校验和的问题。我在书中找不到任何好的解释,所以我在这里询问。 看看下面的例子。 发送以下两条消息:10101001和00111001。校验和用1的补码计算。到目前为止我明白了
以太网帧检查序列始终附加在数据链路层帧的末尾。为什么它附加到帧的末尾而不是其他地方? 我想了一下,认为这可能与例如如何进行有关。计算 CRC 校验和,如果帧的结构是 header+payload+cr
我正在尝试在 Verilog 中为 SENT 传感器协议(protocol)实现 CRC 算法。 在 SAE 发布的一份文件中,他们说他们的 CRC 使用生成多项式x^4 + x^3 + x^2 +
只需添加位即可生成校验和。取 1 补码的额外步骤有何用处? 我理解这个理论。我知道如何计算 1 的补码,并且知道如何将补码相加使结果全为 1。 我想看一个如何检测错误的简单示例。 最佳答案 我相信您正
Google 代码提供如下条形码: 当您下载软件时。它的目的是什么(我假设它与SHA1校验和有关,但如果是这样,它是如何使用的)? 编辑:现在我知道了它的名字,我发现 this article 。谢谢
当我尝试运行此语句时,我的程序无法编译: Checksum checksum = new CRC32(); 错误:找不到符号 符号:校验和类 我在程序开始时完成了以下操作。 import java.u
当我使用 torrent 下载 ISO 镜像时;我应该仍然验证文件的完整性(例如通过计算 sha256 哈希),还是在下载时自动完成? 最佳答案 BitTorrent 协议(protocol)具有一种
我必须做一点 java 自检程序(self-checksum)。这是我的代码示例 public class tamper { public static int checksum_self
我是一名优秀的程序员,十分优秀!