Převést HashBytes na VarChar

hlasů
102

Chci se dostat MD5 hash hodnotu řetězce v SQL Server 2005. I to provést pomocí následujícího příkazu:

SELECT HashBytes('MD5', 'HelloWorld')

Nicméně, toto se vrací varbinary namísto hodnotu varchar. Kdybych se pokusí převést 0x68E109F0F40CA72A15E05CC22786F8E6do VarChar mám há ðô§*à\Â'†øæmísto 68E109F0F40CA72A15E05CC22786F8E6.

Existuje nějaké řešení SQL bázi?

Ano

Položena 05/08/2008 v 12:49
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
134

Zjistil jsem, že else řešení, kde:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Odpovězeno 05/08/2008 v 15:26
zdroj uživatelem

hlasů
59
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Odpovězeno 03/01/2011 v 15:26
zdroj uživatelem

hlasů
29

Použijte master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)místo master.dbo.fn_varbintohexstra pak substringingvýsledek.

Ve skutečnosti fn_varbintohexstrvolá fn_varbintohexsubstringinterně. První argument fn_varbintohexsubstringříká, že má přidat 0xFjako prefix, nebo ne. fn_varbintohexstrvolá fn_varbintohexsubstringse 1jako první argument interně.

Vzhledem k tomu nepotřebujete 0xF, volejte fn_varbintohexsubstringihned.

Odpovězeno 17/03/2011 v 17:00
zdroj uživatelem

hlasů
15

Na rozdíl od toho, co David Knight říká, tyto dvě alternativy vrátí stejnou odezvu v MS SQL 2008:

SELECT CONVERT(VARCHAR(32),HashBytes('MD5', 'Hello World'),2)
SELECT UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('MD5', 'Hello World'), 1, 0))

Takže to vypadá, že první z nich je lepší volbou, od verze 2008.

Odpovězeno 28/08/2014 v 06:35
zdroj uživatelem

hlasů
8
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

(1 pro konverzi šestnáctkové na řetězec)

převést tento snížit a odstranit 0x od začátku řetězce podle dílčího:

substring(lower(convert(varchar(34), HASHBYTES('MD5','Hello World'),1)),3,32)

přesně stejné jako to, co jsme si v jazyce C # po převodu bytů do řetězce

Odpovězeno 07/09/2011 v 08:43
zdroj uživatelem

hlasů
1

S osobní zkušeností s použitím následující kód v uložené proceduře, která hashed si SP proměnná mohu potvrdit, i když bez dokladů, tato kombinace funguje na 100% podle mého příkladu:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
Odpovězeno 24/02/2015 v 22:54
zdroj uživatelem

hlasů
-3

Změna datový typ varbinary zdá se, pracuje pro mě nejlepší.

Odpovězeno 17/02/2010 v 22:31
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more