PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

मैं postgresql में पासवर्ड कैसे हैश कर सकता हूं?

मुझे यह प्रश्न पूछे हुए कुछ समय हो गया है, और मैं अब क्रिप्टोग्राफ़िक सिद्धांत से बहुत अधिक परिचित हूँ, इसलिए यहाँ अधिक आधुनिक दृष्टिकोण है:

तर्क करना

  • एमडी5 का प्रयोग न करें। शा-फ़ैमिली त्वरित हैश के एक चक्र का उपयोग न करें। त्वरित हैश हमलावरों की सहायता करते हैं, इसलिए आप ऐसा नहीं चाहते।
  • इसके बजाय, bcrypt जैसे संसाधन-गहन हैश का उपयोग करें। Bcrypt का समय परीक्षण किया गया है और भविष्य-प्रूफ-सक्षम होने के लिए इसे बढ़ाया जाता है।
  • अपने स्वयं के नमक को रोल करने से परेशान न हों, आप अपनी सुरक्षा या पोर्टेबिलिटी को खराब कर सकते हैं, gen_salt() पर भरोसा कर सकते हैं ताकि यह अपने आप में प्रत्येक उपयोग के लिए अद्वितीय अद्वितीय लवण उत्पन्न कर सके।
  • सामान्य तौर पर, मूर्ख मत बनो, अपना खुद का क्रिप्टो लिखने की कोशिश मत करो, बस स्मार्ट लोगों ने जो प्रदान किया है उसका उपयोग करें।

डेबियन/उबंटू इंस्टाल पैकेज़

sudo apt-get install postgresql   // (of course)
sudo apt-get install postgresql-contrib libpq-dev   // (gets bcrypt, crypt() and gen_salt())
sudo apt-get install php5-pgsql   // (optional if you're using postgresql with php)

अपने डेटाबेस में पोस्टग्रेस्क्ल में क्रिप्ट () और बीक्रिप्ट को सक्रिय करें

// Create your database first, then:
cd `pg_config --sharedir` // Move to the postgres directory that holds these scripts.
echo "create extension pgcrypto" | psql -d yOuRdATaBaSeNaMe // enable the pgcrypo extension

क्वेरी में crypt() और gen_salt() का इस्तेमाल करें

तुलना करें:मौजूदा हैश के साथ पास करें:

select * from accounts where password_hash = crypt(:pass, password_hash);
//(note how the existing hash is used as its own individualized salt)

एक हैश बनाएं:एक महान यादृच्छिक नमक के साथ पासवर्ड:

insert into accounts (password) values crypt(:password, gen_salt('bf', 8));
//(the 8 is the work factor)

पीएचपी से बीक्रिप्ट हैशिंग थोड़ा बेहतर है

password_* हैं php 5.5 और इसके बाद के संस्करण में कार्य करता है जो कि bcrypt (समय के बारे में!) आम तौर पर कि हैशिंग वैसे भी कम CPU उपयोग के लिए लिनक्स सिस्टम कॉल को लपेटने के लिए वापस आती है, हालांकि आप यह सुनिश्चित करना चाहते हैं कि यह आपके सर्वर पर स्थापित है। देखें:https://github.com/ircmaxell/password_compat (php 5.3.7+ की आवश्यकता है)

लॉगिंग से सावधान रहें

ध्यान दें कि pg_crypto के साथ, पासवर्ड ब्राउज़र से PHP तक, डेटाबेस में ट्रांसमिशन के दौरान सादे टेक्स्ट में होते हैं। इसका मतलब है कि उन्हें सादे पाठ में में लॉग किया जा सकता है प्रश्नों से यदि आप अपने डेटाबेस लॉग से सावधान नहीं हैं। जैसे एक पोस्टग्रेस्क्ल धीमी क्वेरी लॉग होने से लॉग इन क्वेरी से पासवर्ड को पकड़ और लॉग इन किया जा सकता है।

सारांश में

यदि आप कर सकते हैं तो PHP bcrypt का उपयोग करें, इससे पासवर्ड के बिना हैश रहने का समय कम हो जाएगा। यह सुनिश्चित करने का प्रयास करें कि आपके linux सिस्टम में bcrypt अपने crypt() . में स्थापित है ताकि प्रदर्शनकारी हो। कम से कम php 5.3.7+ में अपग्रेड करने की अत्यधिक अनुशंसा की जाती है क्योंकि PHP का कार्यान्वयन PHP 5.3.0 से 5.3.6.9 तक थोड़ा छोटा है, और अनुपयुक्त रूप से टूटे हुए DES पर वापस आ जाता है php 5.2.9 और उससे कम में चेतावनी के बिना।

यदि आप इन-पोस्टग्रेज हैशिंग चाहते हैं/चाहते हैं, तो bcrypt स्थापित करना एक रास्ता है, क्योंकि डिफ़ॉल्ट स्थापित हैश पुराने और टूटे हुए हैं (md5, आदि)।

विषय पर अधिक पढ़ने के लिए यहां संदर्भ दिए गए हैं:

  • http://codahale.com/how-to-safely-store-a-password/
  • http://www.postgresql.org/docs/9.2/static/pgcrypto.html
  • https://github.com/ircmaxell/password_compat


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डायनेमिक क्वेरी फंक्शन को पोस्टग्रेज करता है

  2. केवल उन स्तंभों के साथ क्वेरी में शामिल हों जिनके सभी मान `इन` खंड . में हैं

  3. मैं Postgresql SCRAM प्रमाणीकरण समस्या को कैसे हल कर सकता हूं?

  4. पीडीओ के साथ कनेक्ट टाइमआउट सेट करना

  5. PostgreSQL में किसी तालिका की पंक्ति गणना खोजने का तेज़ तरीका