Tạo chuỗi băm MD5 bằng T-SQL


Câu trả lời:



66

Sử dụng HashBytes

SELECT HashBytes('MD5', 'email@dot.com')

Điều đó sẽ cung cấp cho bạn 0xF53BD08920E5D25809DF2563EF9C52B6

-

SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'email@dot.com'),2)

Điều đó sẽ cung cấp cho bạn F53BD08920E5D25809DF2563EF9C52B6


1
@Brendan, bạn đã bỏ dấu ", 2)" ở cuối.
Ryan Elkins

1
@RyanElkins Tôi nhận được kết quả tương tự như Brendan và tôi chắc chắn được bao gồm ", 2)" :(
Matthew

20

Giải pháp:

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32)

16

Không có câu trả lời nào khác phù hợp với tôi. Lưu ý rằng SQL Server sẽ cung cấp các kết quả khác nhau nếu bạn chuyển vào một chuỗi được mã hóa cứng so với nguồn cấp dữ liệu từ một cột trong tập kết quả của bạn. Dưới đây là điều kỳ diệu đã giúp tôi tạo ra sự kết hợp hoàn hảo giữa SQL Server và MySql

select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...

1
Việc sử dụng LOWER()chỉ cần thiết nếu nó phân biệt chữ hoa chữ thường.
T.Coutlakis

Chuyển đổi đầu tiên hóa ra lại quan trọng. Điều này cho ra MD5Hash giống hệt so với MD5()chức năng của Postgresql. Tôi đã tự hỏi tại sao các MD5hash khác với PythonPostgresql. Cảm ơn vì công thức ..
Ben

14

Đối với dữ liệu lên đến 8000 ký tự, hãy sử dụng:

CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)

Demo

Đối với dữ liệu nhị phân (không có giới hạn 8000 byte), hãy sử dụng:

CONVERT(VARCHAR(32), master.sys.fn_repl_hash_binary(@binary_data), 2)

Demo


4

thử cái này:

select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  'email@dot.com' )),3,32) 

0
declare @hash nvarchar(50)
--declare @hash varchar(50)

set @hash = '1111111-2;20190110143334;001'  -- result a5cd84bfc56e245bbf81210f05b7f65f
declare @value varbinary(max);
set @value = convert(varbinary(max),@hash);


select  
 SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '1111111-2;20190110143334;001')),3,32) as 'OK'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', @hash)),3,32) as 'ERROR_01'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',convert(varbinary(max),@hash))),3,32) as 'ERROR_02'
,SUBSTRING(sys.fn_sqlvarbasetostr(sys.fn_repl_hash_binary(convert(varbinary(max),@hash))),3,32)
,SUBSTRING(sys.fn_sqlvarbasetostr(master.sys.fn_repl_hash_binary(@value)),3,32)


0
SELECT CONVERT(
      VARCHAR(32),
      HASHBYTES(
                   'MD5',
                   CAST(prescrip.IsExpressExamRX AS VARCHAR(250))
                   + CAST(prescrip.[Description] AS VARCHAR(250))
               ),
      2
  ) MD5_Value;

làm việc cho tôi.


0

Bạn đã không nói rõ ràng rằng bạn muốn chuỗi là hex; nếu bạn đang sử dụng mã hóa chuỗi cơ sở 64 tiết kiệm không gian hơn và bạn đang sử dụng SQL Server 2016 trở lên, đây là một giải pháp thay thế:

select SubString(h, 1, 32) from OpenJson(
    (select HashBytes('MD5', 'email@dot.com') h for json path)
) with (h nvarchar(max));

Điều này tạo ra:

9TvQiSDl0lgJ3yVj75xStg==
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.