- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Checksum()
、Binary_Checksum()
和CHECKSUM_AVG()
函数由 SQL Server 提供,用于根据表达式构建哈希索引或列列表。
这有助于确定行是否已更改。然后可以使用该机制来识别记录是否已更新。
我发现了很多为不同值生成相同散列值的冲突示例。我们如何识别这些函数的碰撞条件。
有人想知道在没有散列冲突的情况下使用哪种算法或技术生成/计算散列吗?
最佳答案
根据CHECKSUM weakness explained关于 sqlTeam 的文章:
The built-in CHECKUM function in SQL Server is built on a series of 4 bit left rotational xor operations.
A forum post from 2006 (文章中也有链接)由 Peter Larsson 发布,其中包含计算校验和的 sql 用户定义函数。帖子的作者声称与 SQL Server 的内置功能 100% 兼容(我自己没有测试过)。
万一链接失效,这里是相关部分的副本:
With text/varchar/image data, call with SELECTBINARY_CHECKSUM('abcdefghijklmnop')
,dbo.fnPesoBinaryChecksum('abcdefghijklmnop')
With integer data, call withSELECT BINARY_CHECKSUM(123)
,dbo.fnPesoBinaryChecksum(CAST(123 AS VARBINARY))
I haven't figured out how to calculate checksum for integers greater than 255 yet.CREATE FUNCTION dbo.fnPesoBinaryChecksum
(
@Data IMAGE
)
RETURNS INT
AS
BEGIN
DECLARE @Index INT,
@MaxIndex INT,
@SUM BIGINT,
@Overflow TINYINT
SELECT @Index = 1,
@MaxIndex = DATALENGTH(@Data),
@SUM = 0
WHILE @Index <= @MaxIndex
SELECT @SUM = (16 * @SUM) ^ SUBSTRING(@Data, @Index, 1),
@Overflow = @SUM / 4294967296,
@SUM = @SUM - @Overflow * 4294967296,
@SUM = @SUM ^ @Overflow,
@Index = @Index + 1
IF @SUM > 2147483647
SET @SUM = @SUM - 4294967296
ELSE IF @SUM BETWEEN 32768 AND 65535
SET @SUM = @SUM - 65536
ELSE IF @SUM BETWEEN 128 AND 255
SET @SUM = @SUM - 256
RETURN @SUM
ENDActually this is an improvement of MS function, since it accepts TEXT and IMAGE data.
CREATE FUNCTION [dbo].[fnPesoTextChecksum]
(
@Data TEXT
)
RETURNS INT
AS
BEGIN
DECLARE @Index INT,
@MaxIndex INT,
@SUM BIGINT,
@Overflow TINYINT
SELECT @Index = 1,
@MaxIndex = DATALENGTH(@Data),
@SUM = 0
WHILE @Index <= @MaxIndex
SELECT @SUM = (16 * @SUM) ^ ASCII(SUBSTRING(@Data, @Index, 1)),
@Overflow = @SUM / 4294967296,
@SUM = @SUM - @Overflow * 4294967296,
@SUM = @SUM ^ @Overflow,
@Index = @Index + 1
IF @SUM > 2147483647
SET @SUM = @SUM - 4294967296
ELSE IF @SUM BETWEEN 32768 AND 65535
SET @SUM = @SUM - 65536
ELSE IF @SUM BETWEEN 128 AND 255
SET @SUM = @SUM - 256
RETURN @SUM
END
另一个不错的读物是 Exploring Hash Functions In SQL Server作者 Thomas Kejser,作者检查了 sql server 中内置的哈希函数的速度和质量。
关于sql-server - SQL Server 中的 Checksum()、Binary_Checksum() 和 CHECKSUM_AVG() 函数使用哪种算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345105/
我一直在分析一些 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
我是一名优秀的程序员,十分优秀!