2010-02-10 17 views
169

मैं पासवर्ड + नमक पर SHA256 चलाने जा रहा हूं, लेकिन मुझे नहीं पता कि MySQL डेटाबेस सेट करते समय मुझे VARCHAR बनाना कितना समय लगता है। अच्छी लंबाई क्या है?SHA256 हैश कितना समय है?

+3

कोई भी इसे पढ़ने से पहले इस सलाह का पालन करने और हैश पासवर्ड के लिए 'SHA- *' का उपयोग करने का निर्णय लेने से पहले, [कृपया इसे पहले पढ़ें] (https: //security.stackexchan ge.com/questions/16354/whats-the-advantage-of-using-pbkdf2-vs-sha256-to-generate-an-aes-encryption-key)। – c00000fd

+0

उदाहरण के साथ एक विस्तृत ब्लॉग: http: //sforsuresh.in/mysql_varchar_max_length/ –

उत्तर

241

एक sha256 256 बिट लंबा है - जैसा कि इसका नाम इंगित करता है।

यदि आप हेक्साडेसिमल प्रतिनिधित्व का उपयोग कर रहे हैं, तो प्रत्येक बिट कोड 4 बिट्स के लिए कोड; इसलिए आपको 256 बिट्स का प्रतिनिधित्व करने के लिए 64 अंकों की आवश्यकता है - इसलिए, आपको varchar(64), या char(64) की आवश्यकता है, क्योंकि लंबाई हमेशा समान होती है, बिल्कुल भिन्न नहीं होती है।

और डेमो:

$hash = hash('sha256', 'hello, world!'); 
var_dump($hash); 

आप देंगे:

$ php temp.php 
string(64) "68e656b251e67e8358bef8483ab0d51c6619f3e7a1a9f0e75838d41ff368f728" 

अर्थात 64 पात्रों के साथ एक स्ट्रिंग।

+6

क्या हम प्राथमिक कुंजी के रूप में char (64) का उपयोग कर सकते हैं या बाइनरी (32) इसके लिए बेहतर होगा? (access_token) – frankish

+3

यदि आपको लगता है कि आप भविष्य में किसी उपयोगकर्ता को अवरुद्ध करना चाहते हैं, तो मैं केवल 'अग्रणी' के लिए 'वर्कर (65)' का उपयोग करने का सुझाव देता हूं ... बस कह रहा हूं। – Manatax

+54

... या बस एक कॉलम 'अवरुद्ध' जोड़ें? –

19

आप इसे VARCHAR क्यों बनायेंगे? यह अलग नहीं है। यह हमेशा 64 वर्ण होता है, जिसे one of the online SHA-256 calculators में कुछ भी चलाकर निर्धारित किया जा सकता है।

+0

char (64) मान्य mysql कथन है? – sepiroth

+21

@hatorade: नहीं, यह कोई कथन नहीं है, लेकिन यह एक मान्य कॉलम प्रकार है। –

+9

वर्कर भी तब तक आवंटित नहीं करता जब तक इसका उपयोग नहीं किया जाता है, char के विपरीत यह कुल वर्णों की संख्या आवंटित करता है, भले ही डेटा भरने पर ध्यान दिया जाए। – Xenland

6

यह 64 वर्ण तय किया जाएगा, ताकि का उपयोग char(64)

18

मैं द्विआधारी (32) का उपयोग करने के बाद से यह अनुकूलित रास्ता नहीं है पसंद करते हैं!

आप उस 32 हेक्स अंकों (00 से एफएफ) में रख सकते हैं।

इसलिए बिनरी (32)!

+6

+1 - मुझे अनुकूलित किया गया है ... इस पर किसी और के लिए ... MySQL के साथ इसका उपयोग करने के लिए ... आप 'अद्यतन ... SET हैश_column = UNHEX (sha256HexString) का उपयोग कर सकते हैं।फिर, इसे पुनर्प्राप्त करते समय, आप 'हेक्स हैश (हैश_column) AS हैश_column' चुनें। –

32

SHA256 के 256 बिट्स के लिए एन्कोडिंग विकल्प:

  1. Base64: गद्दी चरित्र सहित चार = CHAR(44) प्रति 6 बिट
  2. हेक्स: चार = CHAR(64)
  3. बाइनरी प्रति 4 बिट्स: 8 बाइट प्रति बिट = BINARY(32)
+13

बेस 64 प्रति 4 वर्णों में 3 बाइट्स है, इसलिए 32 बाइट 43 वर्णों में फिट बैठते हैं, फिर भी आपको वास्तव में 44 की आवश्यकता होती है। एक अतिरिक्त = अंतिम वर्ण के रूप में जोड़ा जाता है – Wilco

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