2010-02-19 15 views
31

सत्र संग्रह करने के उद्देश्य से हैश उत्पन्न करने का सबसे अच्छा तरीका क्या है? मैं हल्के, पोर्टेबल समाधान की तलाश में हूं।यादृच्छिक हैश/स्ट्रिंग बनाने का सबसे अच्छा तरीका क्या है?

उत्तर

8

आप PHP के अंतर्निर्मित हैशिंग फ़ंक्शन, sha1 और md5 का उपयोग कर सकते हैं। दोनों को चुनें, दोनों नहीं।

कोई ऐसा सोच सकता है कि sha1(md5($pass)) दोनों का उपयोग समाधान होगा। दोनों का उपयोग करने से आपका पासवर्ड अधिक सुरक्षित नहीं होता है, इसका अनावश्यक डेटा होता है और इससे ज्यादा समझ नहीं आती है।

PHP Security Consortium: Password Hashing पर एक नज़र डालें, वे कमजोरियों के साथ एक अच्छा लेख देते हैं और हैशिंग के साथ सुरक्षा में सुधार करते हैं।

Nonce "n के लिए खड़ा है एक बार"। इन्हें अनधिकृत पहुंच को रोकने के अनुरोधों पर उपयोग किया जाता है, वे गुप्त कुंजी भेजते हैं और प्रत्येक बार आपके कोड का उपयोग होने पर कुंजी की जांच करते हैं।

आपको कम से अधिक PHP NONCE Library from FullThrottle Development

+0

धन्यवाद। मैं इसे देखने के लिए जा रहा हूं –

+5

md5 हैक किया गया है, sha1 –

+4

SHA1 का उपयोग भी किया जा सकता है (कम से कम सैद्धांतिक रूप से)। विवरण के लिए [हैश फ़ंक्शन सुरक्षा सारांश] (https://en.wikipedia.org/wiki/Hash_function_security_summary) देखें। मैं SHA256 या SHA512 के साथ जाऊंगा। – colan

0

की जांच कर सकते मैं व्यक्तिगत रूप से मेरे सत्र स्टोर करने के लिए एक यादृच्छिक अद्वितीय संख्या उत्पन्न करने के लिए अपाचे के mod_unique_id का उपयोग करें। इसका उपयोग करना वास्तव में आसान है (यदि आप अपाचे का उपयोग करते हैं)।

गैर-यहां देखने के लिए http://en.wikipedia.org/wiki/Cryptographic_nonce यहां एक PHP लाइब्रेरी का लिंक भी है।

8

शायद uniqid() क्या आपको चाहिए?

uniqid — Generate a unique ID

+0

अभी, मैं uniqid() का उपयोग कर रहा हूं लेकिन मैंने पढ़ा है कि एक uniqid() पर md5 का उपयोग करना अच्छा नहीं है। –

+7

आप एमडी 5 का उपयोग क्यों करना चाहते हैं? बस uniqid का उपयोग करें। –

0

मैं आम तौर पर मैन्युअल रूप से न सत्र आईडी का प्रबंधन। मैंने कुछ पंक्तियों को पहले मिश्रण करने के लिए अनुशंसित इन पंक्तियों के साथ कुछ देखा है, मैंने कभी भी खुद का उपयोग नहीं किया है, इसलिए मैं इसे डिफ़ॉल्ट से बेहतर या बदतर होने की पुष्टि नहीं कर सकता (नोट यह मैन्युअल प्रबंधन के साथ ऑटोजन के साथ उपयोग के लिए है)।

//md5 "emulation" using sha1 
ini_set('session.hash_function', 1); 
ini_set('session.hash_bits_per_character', 5); 
+0

मैं निर्मित PHP सत्र कार्यों का उपयोग नहीं करता क्योंकि मेरे पास उनके ऊपर अधिक नियंत्रण नहीं है और शायद असुरक्षित है। –

+2

मैं आपको आश्वस्त कर सकता हूं कि वे किसी भी फ़ंक्शन से अधिक सुरक्षित हैं जो आपको लगता है कि सुरक्षित है :) –

62
bin2hex(mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)); 
  1. mcrypt_create_iv आप बाइट्स की एक यादृच्छिक अनुक्रम दे देंगे। मन में

    d2c63a605ae27c13e43e26fe2c97a36c4556846dd3ef 
    

    नंगे कि "सर्वश्रेष्ठ" एक रिश्तेदार शब्द है:

  2. bin2hex

उदाहरण आउटपुट ASCII पाठ करने के लिए इसे परिवर्तित कर देंगे। सुरक्षा, विशिष्टता और गति के बीच आपके पास व्यापार करने का एक व्यापार है। उपर्युक्त उदाहरण 99% मामलों के लिए अच्छा है, हालांकि यदि आप विशेष रूप से संवेदनशील डेटा से निपट रहे हैं, तो आप difference between MCRYPT_DEV_URANDOM and MCRYPT_DEV_RANDOM के बारे में पढ़ना चाहेंगे।

अंत में, RandomLib "यादृच्छिक संख्याएं और विभिन्न शक्तियों के तार उत्पन्न करने के लिए" है।

सूचना है कि अब तक मैं मान लिया है कि आप के लिए देख रहे एक यादृच्छिक स्ट्रिंग, जो एक ही नहीं है एक मूल्य से एक हैश पाने के रूप में उत्पन्न करते हैं। बाद के लिए, password_hash देखें।

+5

बस थोड़ा सा पीएसए: 'mcrypt_create_iv' PHP 7.1.0 में बहिष्कृत किया गया था। इसके बजाय ['random_bytes'] (http://uk1.php.net/manual/en/function.random-bytes.php) का उपयोग करें। –

-3

अलग-अलग लोगों के पास अलग-अलग best तरीके होंगे।

  1. डाउनलोड इस rand-hash.php फ़ाइल: http://bit.ly/random-string-generator
  2. include() यह PHP स्क्रिप्ट है कि आप के साथ काम कर रहे हैं लेकिन यह मेरा तरीका है। फिर, बस cc_rand() फ़ंक्शन पर कॉल करें। डिफ़ॉल्ट रूप से यह 6 वर्ण लंबे यादृच्छिक स्ट्रिंग को वापस कर देगा जिसमें a-z, A-Z, और 0-9 शामिल हो सकते हैं। आप length पास कर सकते हैं यह निर्दिष्ट करने के लिए कि cc_rand() कितने वर्ण वापस आना चाहिए।

उदाहरण:

  1. cc_rand() की तरह कुछ वापस आ जाएगी: 4M8iro

  2. cc_rand(15) यह करने के लिए कुछ इसी तरह वापस आ जाएगी: S4cDK0L34hRIqAS

चीयर्स!

+0

यह क्रिप्टोग्राफ़िक रूप से सुरक्षित मान उत्पन्न नहीं करता है क्योंकि यह ['rand()'] (https://secure.php.net/manual/en/function.rand.php) का उपयोग करता है। – 0b10011

4

आप openssl_random_pseudo_bytes का उपयोग php 5.3.0 के बाद बाइट्स की एक छद्म यादृच्छिक स्ट्रिंग उत्पन्न करने के लिए कर सकते हैं। आप इस सुविधा का उपयोग और स्ट्रिंग के लिए किसी तरह से परिवर्तित इन तरीकों में से एक का उपयोग कर सकते हैं:, संख्या, लोअरकेस, अपरकेस और साथ

$bytes = openssl_random_pseudo_bytes(32); 
$hash = base64_encode($bytes); 

या

$bytes = openssl_random_pseudo_bytes(32); 
$hash = bin2hex($bytes); 

पहले एक कम से कम स्ट्रिंग उत्पन्न होगा कुछ विशेष पात्र (=, +, /)। दूसरा विकल्प हेक्साडेसिमल संख्याओं (0-9, वायुसेना) उत्पन्न होगा

0

अगर यह उपलब्ध है तो random_bytes() का उपयोग करें!

$length = 32;

if (function_exists("random_bytes")) { 
    $bytes = random_bytes(ceil($lenght/2)); 
    $token = substr(bin2hex($bytes), 0, $lenght) 
} 

Check it on php.net

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