2009-11-17 6 views
27

में sha256 का उपयोग कैसे करें मैं पासवर्ड एन्क्रिप्ट करने के लिए sha256 का उपयोग कर रहा हूं। मैं mysql में sha256 एन्क्रिप्टेड पासवर्ड को सहेज सकता हूं। लेकिन मैं एक ही खंड के साथ लॉगिन नहीं कर सकता।php5.3.0

सम्मिलित कोड:

<?php 
error_reporting(E_ALL^E_NOTICE); 
$username = $_POST['uusername']; 
$passcode = $_POST['ppasscode']; 
$userflag = $_POST['uuserflag']; 
//$passcodeen = hash('sha256',$passcode); 
$passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode)); 
$conn = mysql_connect("localhost","charles","charles") or die("connection failed with DB:".mysql_error()); 
mysql_select_db("sessiondb"); 
$query = "INSERT INTO users(username,passcode,userflag) values('$username','$passcodeen','$userflag')"; 

करें कोड:

<?php 
error_reporting(E_ALL^E_NOTICE); 

    @mysql_connect("localhost","charles","charles") or die("Connection failed".mysql_error()); 
    @mysql_select_db("sessiondb") or die("Database doesn't exist".mysql_error()); 
    //get user input 
    $username = $_POST['username']; 
    $ppasscode = $_POST['ppasscode']; 
    //$passcodeen = hash('sha256', $ppasscode); 
    $passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode)); 
    //get session value from mysql 
    $query = @mysql_query("select username, userflag from users where username ='$username' and passcode = '$passcodeen'") or die("Query execution failed".mysql_error()); 

वहाँ कुछ गलत है? मैं बड़ी उलझन में हूं। धन्यवाद।

+2

आप एक VARCHAR क्षेत्र का उपयोग कर रहे पासवर्ड स्टोर करने के लिए? क्योंकि varchars पर अधिकतम आकार 255 वर्ण है ... – davethegr8

+0

तुम क्या यह कोड में की तरह लग रहा बनाम डेटाबेस में संग्रहीत अपने रूप में हैश का एक नमूना पोस्ट कर सकते हैं? –

+1

sha256 के लिए, आपको कम से कम 64 वर्णों के VARCHAR की आवश्यकता है। –

उत्तर

40

क्या यह एक टाइपो हो सकता है? (दो पीएस ppasscode में, इरादा?)

$_POST['ppasscode']; 

मुझे यकीन है कि बनाना होगा और कार्य करें:

print_r($_POST); 

और सुनिश्चित करें कि डेटा वहाँ सटीक है, और फिर बाहर गूंज यह कैसा दिखना चाहिए:

echo hash('sha256', $_POST['ppasscode']); 

इस आउटपुट की तुलना डेटाबेस में (मैन्युअल रूप से) में करें। ऐसा करने से आप विफलता के अपने संभव अंक खोज कर रहे हैं:

  1. पासवर्ड hashing
  2. संग्रहीत पासवर्ड
  3. दो की तुलना प्रपत्र
  4. से पासवर्ड प्राप्त करना।
+0

@ जेरेमी, धन्यवाद, हाँ, 'पीपासकोड' का इरादा है। –

+0

नमक का उपयोग कैसे करें? इनपुट सत्यापन पर सलाह के लिए – mofidul

11

सबसे पहले, sha256 एक हैशिंग एल्गोरिदम है, न कि एन्क्रिप्शन का एक प्रकार। एक एन्क्रिप्शन के लिए सूचना को अपने मूल मूल्य (टकराव को अलग) पर डिक्रिप्ट करने का तरीका होने की आवश्यकता होगी।

अपने कोड को देखते हुए, ऐसा लगता है कि यदि आप सही पैरामीटर प्रदान कर रहे हैं तो यह काम करना चाहिए।

  • पहले अपने कोड में एक शाब्दिक स्ट्रिंग उपयोग करने का प्रयास है, और उपयोग करने के बजाय अपनी वैधता की पुष्टि $_POST[] चर

  • (दिए गए के लिए कोड के लिए डेटाबेस क्वेरी से तुलना चलती हैश मिल की कोशिश करो उपयोगकर्ता और हैश तुम सिर्फ गणना की है, की तुलना)

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

+1

+1। पैरामीटरेटेड प्रश्न बहुत कम अतिरिक्त कोडिंग के लिए नियंत्रण का एक बड़ा सौदा प्रदान करते हैं। –

+0

@Yannick, आपकी अच्छी सलाह के लिए धन्यवाद। –

1

आप को सुरक्षित पासवर्ड

-1

एक तरह से बेहतर समाधान सिर्फ एंथनी फ़ेरेरा से उत्कृष्ट संगतता स्क्रिप्ट का उपयोग करने के लिए है के लिए http://en.wikipedia.org/wiki/Bcrypt तरह अनुकूली हैशिंग का उपयोग करना चाहिए:

https://github.com/ircmaxell/password_compat

कृपया, और यह भी, जब जाँच पासवर्ड, हमेशा आवश्यक होने पर हैश को अपडेट करने के लिए हमेशा एक तरीका जोड़ें (अधिमानतः async, इसलिए यह टाइमिंग हमलों के लिए जांच प्रक्रिया को प्रभावित नहीं करता है)।