2012-07-12 16 views
7

में कनवर्ट किए बिना VARCHAR से बाइट प्राप्त करें हम डेटाबेस में एक पासवर्ड हैश स्टोर करते हैं। असल में हमें MD5 हैश (बाइट्स की सरणी) मिलती है और फिर बाइट सरणी और स्टोर पर एन्कोडिंग। यूनिकोड.गेट चार्ज चलाती है जिसके परिणामस्वरूप डेटाबेस में स्ट्रिंग होती है। फिर जब कोई लॉग इन करता है तो हम उनके पासवर्ड को उसी तरह से रखते हैं और दो तारों की तुलना करते हैं।टी-एसक्यूएल यूनिकोड

यह बहुत अच्छा काम करता है, सिवाय इसके कि मैं टी-एसक्यूएल में पासवर्ड हैश निकालने और इसे किसी अन्य पंक्ति में सम्मिलित नहीं कर सकता। काम करने के लिए मैं इसे प्राप्त करने का एकमात्र तरीका यह है कि यदि मैं वास्तव में एक वैध हैश के साथ किसी अन्य पंक्ति के चयन से पासवर्ड हैश सेट करता हूं।

मैंने स्ट्रिंग को हेक्स में बदलने की कोशिश की है और एसक्यूएल को इसे परिवर्तित करने की कोशिश की है, लेकिन यह या तो काम नहीं करता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि हम जिन बाइट्स को यूनिकोड के रूप में एन्कोड करते हैं वे शायद एक वैध यूनिकोड स्ट्रिंग नहीं बनाते हैं।

उदाहरण के लिए

तो (SQL Server: Convert a string into a hex string and back):

जब आप निम्न आदेश चला, शब्द 'सहायता' वर द्विआधारी करने के लिए वापस एक स्ट्रिंग में परिवर्तित हो जाता है और फिर और हे की सफ़ाई! आप फिर से 'सहायता' के साथ खत्म हो जाते हैं।

SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), 'Help')) 

समस्या यह है कि जब मैं अपना पासवर्ड हैश स्तंभ पर कि चलाने के लिए, जिसके परिणामस्वरूप मूल्य नहीं एक ही रूप में स्तंभ में संग्रहीत किया जाता है। यदि मैं दो 'प्रतीकों के बीच एसक्यूएल प्रबंधन स्टूडियो में हैश युक्त स्ट्रिंग पेस्ट करता हूं, तो यह' अतीत से कूदता है 'और कुछ अन्य पात्रों में रखता है। फिर, probalby एक अधूरा UNICODE अनुक्रम को interperet करने की कोशिश कर रहा है क्योंकि यह एक उचित यूनिकोड स्ट्रिंग नहीं है।

0x0F037584C99E7FD4F4F8C59550F8F507 

ताकि:

तो क्या मैं देख रहा हूँ एक तरह से बस VARCHAR में बाइट्स लेने के लिए (64) पासवर्ड हैश कि और, की तरह कुछ यह एक एनकोड पाठ स्वरूप को लिखने है मैं कुछ ऐसा कर सकता हूं जैसे

UPDATE [User] 
SET  PasswordHash = CONVERT(NVARCHAR(64), 0x0F037584C99E7FD4F4F8C59550F8F507) 
WHERE UserID = 123 

कोई विचार?

उत्तर

4

डीयूएच! मिल गया। जैसे ही मैं अपनी पोस्ट को दोबारा पढ़ रहा था, मुझे एहसास हुआ कि मेरे उदाहरणों में मैं वर्चर में कनवर्ट का उपयोग कर रहा था, न कि एनवीएआरएआरएआर। एक बार जब मैंने इसे NVARCHAR में बदल दिया, तो यह सब काम करना शुरू कर दिया।

0

आप उपयोग कर सकते

select CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX),FileBytes)) 

    FileBytes=0x3C3F786D6C207665 
संबंधित मुद्दे