Μετατροπή HashBytes να varchar

ψήφοι
102

Θέλω να πάρω το Hash MD5 μια τιμή συμβολοσειράς του SQL Server 2005. Το κάνω αυτό με την ακόλουθη εντολή:

SELECT HashBytes('MD5', 'HelloWorld')

Ωστόσο, αυτό επιστρέφει ένα varbinary αντί για μια τιμή varchar. Αν θα επιχειρήσει να μετατρέψει 0x68E109F0F40CA72A15E05CC22786F8E6σε ένα varchar παίρνω há ðô§*à\Â'†øæαντί 68E109F0F40CA72A15E05CC22786F8E6.

Υπάρχει κάποιο SQL-based λύση;

Ναί

Δημοσιεύθηκε 05/08/2008 στις 12:49
πηγή χρήστη
Σε άλλες γλώσσες...                            


7 απαντήσεις

ψήφοι
134

Έχω βρει το άλλο λύση όπου:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Απαντήθηκε 05/08/2008 στις 15:26
πηγή χρήστη

ψήφοι
59
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Απαντήθηκε 03/01/2011 στις 15:26
πηγή χρήστη

ψήφοι
29

Χρησιμοποιήστε master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)αντί master.dbo.fn_varbintohexstrκαι στη συνέχεια substringingτο αποτέλεσμα.

Στην πραγματικότητα fn_varbintohexstrκαλεί fn_varbintohexsubstringεσωτερικά. Το πρώτο επιχείρημα του fn_varbintohexsubstringλέει να προσθέσετε 0xFως πρόθεμα ή όχι. fn_varbintohexstrκαλεί fn_varbintohexsubstringμε 1ως το πρώτο επιχείρημα internaly.

Επειδή δεν χρειάζεται 0xF, καλέστε fn_varbintohexsubstringάμεσα.

Απαντήθηκε 17/03/2011 στις 17:00
πηγή χρήστη

ψήφοι
15

Σε αντίθεση με ό, τι David Ιππότης λέει, οι δύο αυτές εναλλακτικές λύσεις επιστρέψει την ίδια απάντηση σε 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))

Έτσι μοιάζει το πρώτο είναι μια καλύτερη επιλογή, αρχής γενομένης από την έκδοση του 2008.

Απαντήθηκε 28/08/2014 στις 06:35
πηγή χρήστη

ψήφοι
8
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

(1 για τη μετατροπή δεκαεξαδική να string)

μετατρέψει αυτό για να μειώσει και να αφαιρέσετε 0x από την αρχή του string από συμβολοσειράς:

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

ακριβώς το ίδιο με αυτό που έχουμε σε C #, μετά τη μετατροπή bytes σε string

Απαντήθηκε 07/09/2011 στις 08:43
πηγή χρήστη

ψήφοι
1

Με προσωπική εμπειρία από τη χρήση του παρακάτω κώδικα μέσα σε μια αποθηκευμένη διαδικασία που κατακερματίζεται ένα Μεταβλητό SP μπορώ να επιβεβαιώσω, αν και χωρίς χαρτιά, ο συνδυασμός αυτός λειτουργεί 100% σύμφωνα με το παράδειγμα μου:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
Απαντήθηκε 24/02/2015 στις 22:54
πηγή χρήστη

ψήφοι
-3

Η αλλαγή του τύπο δεδομένων για να varbinary φαίνεται να λειτουργεί το καλύτερο για μένα.

Απαντήθηκε 17/02/2010 στις 22:31
πηγή χρήστη

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