【问题标题】:MD5 sum of a image column in SQL serverSQL server中图像列的MD5总和
【发布时间】:2015-10-21 10:18:37
【问题描述】:

如何在 SQL Server 中计算图像列的校验和(无论是 MD5 还是其他)?即类似

SELECT HASHBYTES('md5', d.data)
FROM ATTACHMENTDATA D

8116 参数数据类型图像对于 hashbytes 的参数 2 无效 功能

尝试:

SELECT HASHBYTES('md5', CONVERT(nvarchar(4000), d.data))
FROM ATTACHMENTDATA D

结果:

529 从数据类型 image 到 nvarchar 的显式转换不是 允许

如果这很重要,我会使用 Microsoft SQL Server 10.50.4000 (SQL Server 2008 R2)

【问题讨论】:

  • image 自 2005 年以来已弃用(我认为),您应该使用 varbinary(max)。此外,您尝试将二进制数据转换为文本是没有意义的
  • 你将如何使用这个校验和? SQL Server 具有安全签名数据的功能,而更改检测校验和最好在将值存储到数据库之前计算
  • 请注意,hashbytes 在输入参数中可以接受不超过 8000 个字节。根据数据及其用途,hashbytes 可能合适或不合适。

标签: sql-server sql-server-2008 tsql


【解决方案1】:

将数据列转换为VARBINARY

SELECT HASHBYTES('md5', CAST(d.data AS VARBINARY(MAX)))
FROM ATTACHMENTDATA D

MD5 是弱哈希算法,使用SHA1SHA2_256SHA2_512 代替。

另请注意:IMAGE 数据类型已弃用。

【讨论】:

  • MD5是否合适取决于它的用法。它足以检测更改,但不适合加密或签名。另一方面,SHA2 算法可能更快,因为它们优化了操作系统/硬件支持并使用更大的块大小 - 即需要计算的块更少
【解决方案2】:

尝试将其转换为 VARBINARY(MAX)

另外,请参阅 Microsoft 的此说明,地址为 https://msdn.microsoft.com/en-za/library/ms187993.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2023-04-09
    • 2011-12-13
    相关资源
    最近更新 更多