2011-09-22 14 views
5

इस लेखबाइट प्रतिनिधित्व?

http://decipherinfosys.wordpress.com/2007/05/18/checksum-functions-in-sql-server-2005/

वे कहते हैं कि

BINARY_CHECKSUM() एक ही मान देता है, तो दो भाव के तत्वों एक ही प्रकार के और बाइट प्रतिनिधित्व के अनुसार। तो, "2Volvo निदेशक 20" और "3Volvo निदेशक 30" ही मूल्य निकलेगा

मेरे सवाल byte representation क्या कर रहा है?

और क्यों

SELECT BINARY_CHECKSUM('2Volvo Director 20' )// -1356512636 
SELECT BINARY_CHECKSUM('3Volvo Director 30' )// -1356512636 

ही परिणाम देता है?

'' की बाइट नहीं ''

उत्तर

5

की बाइट मैं बिल्कुल नहीं जानता कि उस लेख है कि शब्दों से मतलब है के रूप में है, लेकिन आसपास googling से मुझे लगता है कि देख एक एसक्यूएल सर्वर एमवीपी ने पूर्ण एल्गोरिदम (जैसे here) को रिवर्स-इंजीनियर किया है और अन्य ने देखा है कि एल्गोरिदम में 16-वर्ण चक्र के आसपास अजीब समस्याएं हैं। ध्यान दें कि कि नमूने में, परिवर्तन स्थिति 1 और स्थिति 17 में पाए जाते हैं:

SELECT BINARY_CHECKSUM('2Volvo Director 20' )-- -1356512636 
SELECT BINARY_CHECKSUM('3Volvo Director 30' )-- -1356512636 
--      123456789

जो 16 अलग कर रहे हैं - अगर अंतरिक्ष इतना परिवर्तन पदों 1 पर होते हैं और , आप विभिन्न चेकसम मिल निकाल दिया जाता है:

SELECT BINARY_CHECKSUM('2Volvo Director20' )-- 1257395465 
SELECT BINARY_CHECKSUM('3Volvo Director30' )-- 1257395480 
--      123456789

इंटरनेट आम सहमति होने के लिए हैश BINARY_CHECKSUM द्वारा की पेशकश समारोह कम गुणवत्ता की है कि प्रतीत होता है, और आप वरीयता में HASHBYTES उपयोग करना होगा।

+0

तो ... अगर इसका सटीक नहीं है तो उन्होंने इसका आविष्कार क्यों किया? या इसमें कुछ ब्लैक होल हैं (16 'चक्र ...) –

+0

हम सभी गलतियां करते हैं, यहां तक ​​कि माइक्रोसॉफ्ट :) विशेष रूप से, अच्छे हैश कार्यों के साथ आना बेहद मुश्किल है, जबकि खराब हैश कार्यों के साथ आना बेहद आसान है। कम से कम ['चेक्सम' के लिए दस्तावेज़] (http://msdn.microsoft.com/en-us/library/ms189788.aspx) कहें (मूल रूप से) "इसका उपयोग न करें"। – AakashM

+0

चुनें BINARY_CHECKSUM ('fa') चुनें BINARY_CHECKSUM ('डीए') दोनों समान मूल्य उत्पन्न करते हैं ... 1537 – nav

संबंधित मुद्दे