标签: hashbytes

SQL Server 2014 nvarchar(max)结果的Hashbytes是nvarchar(max)

使用SQL Server 2014我有,有一个表nvarchar(max)称为列[ASCII File]其中可以包含很多K的ASCII文本文件,然后我想这样做对文件和结果哈希应该永远是20个字节的MD5 HASHBYTES.

好吧,当我做一个选择hashbytes('MD5', [ASCII File])我得到查询完成错误

消息8152,级别16,状态10,行4
字符串或二进制数据将被截断.

我尝试时收到同样的信息

left(hashbytes('MD5', [ASCII File]), 50)
Run Code Online (Sandbox Code Playgroud)

我尝试时收到同样的信息

convert(varchar(50), hashbytes('MD5', [ASCII File]))
Run Code Online (Sandbox Code Playgroud)

似乎自从我正在进行哈希字节的列时,哈希nvarchar(max)字节函数的结果也是如此nvarchar(max).

你能告诉我如何才能让结果成为预期的20长,而不是这么长时间它必须被截断吗?

sql-server hashbytes

9
推荐指数
2
解决办法
7680
查看次数

Binary_Checksum与HashBytes函数

我有一个复杂的查询,它使用大量的二进制校验和函数,当我用两个不同记录的一些测试数据对其进行测试时,实际上返回了相同的校验和值。请在下面找到我使用的测试数据

SELECT BINARY_CHECKSUM(16   ,'EP30461105',1) AS BinaryCheckSumEx UNION ALL
SELECT BINARY_CHECKSUM(21   ,'EP30461155',1) AS BinaryCheckSumEx
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试将HASHBYTES函数与“ MD5”算法一起使用,可以肯定地为其获取唯一记录,但是现在让我担心的是,在当前查询中,我使用“校验和”值来加入“合并”语句寻找新记录。由于“ HashBytes”返回我Varbinary数据类型,所以当我用“ HashByte”字段替换联接条件时,可以期望多少性能开销。

SELECT HASHBYTES('MD5', CONCAT(Col1,Col2,Col3,Col4,..))
Run Code Online (Sandbox Code Playgroud)

而且,我需要为多个列创建哈希,在这种情况下,我需要具有一个额外的Concat函数,这会对我的性能产生额外的开销。

sql checksum database-performance sql-server-2012 hashbytes

5
推荐指数
1
解决办法
4359
查看次数

使用西班牙语单词时,SHA256 在 C# 和 SQL Server 之间不会产生相同的结果

我正在使用 SHA256 来获取散列的十六进制字符串。使用常规字符时它工作得很好,但是当要散列的字符串包含重音符号/变音符号时,我在 C# 和 T-SQL 中会得到不同的结果。我更愿意在 SQL Server 端进行更改。

\n\n
    \n
  • 匹配的示例单词:bird
  • \n
  • 不匹配的示例单词:MU\xc3\x91OZ
  • \n
\n\n

C#

\n\n
using (SHA256 sha2 = SHA256.Create())  \n{\n    var hash = sha2.ComputeHash(Encoding.UTF8.GetBytes(fullAddress));\n    string hexString = string.Empty;\n\n    for (int i = 0; i < hash.Length; i++)\n    {\n        hexString += hash[i].ToString("X2"); //Convert the byte to Hexadecimal representation, Notice that we use "X2" instead of "X"\n    }\n\n    sha2.Dispose();\n    return hexString;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

SQL

\n\n
declare @fullAddress nvarchar(500)\nset @fullAddress = \'MU\xc3\x91OZ\'\nselect CONVERT([varchar](256), HASHBYTES(\'SHA2_256\', @fullAddress), 2) \n
Run Code Online (Sandbox Code Playgroud)\n

c# sql-server sha256 hashbytes

4
推荐指数
1
解决办法
3466
查看次数

sql 中的 HASHBYTES、sha2_256 在从 python 调用时引入坏字符

我们的旧 sql 遗留代码之一,使用 HASHBYTES 函数和 sha2_256 转换 sql 中的数字列。

整个过程正在转移到 python,因为我们在遗留工作之上加入了一些高级用法。但是,在使用连接器时,我们调用了相同的 sql 代码,即 HASHBYTES('sha2_256',column_name) id 返回带有大量垃圾的值。

在 sql 中运行代码导致此

Column      Encoded_Column
101286297   0x7AC82B2779116F40A8CEA0D85BE4AA02AF7F813B5383BAC60D5E71B7BDB9F705
Run Code Online (Sandbox Code Playgroud)

从 python 运行相同的 sql 查询结果

Column      Encoded_Column
101286297 
Run Code Online (Sandbox Code Playgroud)

b"z\xc8+'y\x11o@\xa8\xce\xa0\xd8[\xe4\xaa\x02\xaf\x7f\x81;S\x83\xba\xc6\r^q\xb7\xbd\xb9\ xf7\x05"

代码是

Select Column,HASHBYTES('SHA2_256', CONVERT(VARBINARY(8),Column)) as Encoded_Column from table
Run Code Online (Sandbox Code Playgroud)

我尝试过通常的垃圾清除,但没有帮助

python sql connector pandas hashbytes

3
推荐指数
1
解决办法
298
查看次数

当在CASE WHEN/IIF中使用时,SQL HASHBYTES函数返回奇怪的输出

我编写了一个存储过程来散列某个列的值.我需要在CASE WHEN或IIF语句中使用此HASHBYTES函数,如下所示:

DECLARE @Hash varchar(255) = 'testvalue'
SELECT    IIF(1=1, HASHBYTES('SHA1',@Hash), @Hash)
SELECT CASE WHEN 1=1 THEN HASHBYTES('SHA1',@Hash) END  AS Hashcolumn
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么我从上面的查询得到不同的输出?似乎每当我在CASE WHEN/IIF语句中添加一个ELSE时,它都会返回一串奇怪的字符(ü<þ+OUL'RDOk{­\Ìø如上例所示).

谁能告诉我为什么会这样?我需要使用CASE WHEN或IIF.

多谢你们

sql sql-server stored-procedures hashbytes

2
推荐指数
1
解决办法
274
查看次数

哈希不匹配

我正在散列相同的值,但得到不同的结果。

这是一个简单的示例来解释我遇到的情况:

我有一个如下所示的维度表:

性别 性别_id
男性 1
女性 0

性别的数据类型是 NVARCHAR(6),gender_id 是 INT

当我执行以下任何查询时,我得到相同的哈希值:

**Scenario 1:**
SELECT 
       CONVERT(BINARY(20), HASHBYTES('Md5', Concat(Gender, cast(gender_id as int))))
FROM demographic
WHERE gender = 'Male';
Run Code Online (Sandbox Code Playgroud)

输出:'0x6B216D8BB993AA263265CCF645C282B100000000'

**Scenario 2:**
    SELECT  
           CONVERT(BINARY(20), HASHBYTES('Md5', Concat(Gender, CAST(gender_id AS NVARCHAR(1)))))
    FROM demographic
    WHERE gender = 'Male';
Run Code Online (Sandbox Code Playgroud)

输出:'0x6B216D8BB993AA263265CCF645C282B100000000'

在场景1中,我将gender_id转换为INT,在场景2中我将gender_id转换为NVARCHAR。在这两种情况下,哈希值是相同的。

当我执行调用维度中特定值而不是列的查询时,我的散列是不同的:

 **Scenario 3:**
    SELECT CONVERT(BINARY(20), HASHBYTES('MD5', Concat('Male', CAST(1 as INT))));
Run Code Online (Sandbox Code Playgroud)

输出:'0x048A5F0EE2D2B4070CFF8A38CB6DAC7100000000'

**Scenario 4:**
    SELECT CONVERT(BINARY(20), HASHBYTES('MD5', Concat('Male', CAST(1 as NVARCHAR(1)))));
Run Code Online (Sandbox Code Playgroud)

输出:'0x6B216D8BB993AA263265CCF645C282B100000000'

在场景 3 中,我像在场景 1 中一样将 1 转换为 INT。在场景 4 中,我像在场景 2 中一样将 …

sql-server hash md5 sqldatatypes hashbytes

2
推荐指数
1
解决办法
96
查看次数

SQL Server:如何检索使用HASHBYTES加密的密码的实际值

在此处输入图片说明

insert into Customer(AccountNo,Name,EmailId,MobileNo,[Password],Balance,
                     CustomerKey,OTPPin,CreatedBy,CreatedOn)
values(@AccountNumber,@Name,@EmailId,
       EncryptByPassPhrase(@PassPhrase, CONVERT(nvarchar,@MobileNo)),
       HASHBYTES('SHA1',@Password),@TotalBalance,@CustomerKey,@OTPPin,0,GETDATE())
Run Code Online (Sandbox Code Playgroud)

我正在以这种形式获得价值在此处输入图片说明

现在,我想要密码的实际值。我怎么才能得到它?

sql-server passwords sha1 sql-server-2008 hashbytes

1
推荐指数
1
解决办法
4276
查看次数