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

क्या Oracle में कोई अंतर्निहित हैश फ़ंक्शन है?

हां:हैशिंग और एन्क्रिप्टिंग (संबंधित लेकिन बिल्कुल समान नहीं) सभी SYS पैकेज DBMS_CRYPTO के माध्यम से किए जाते हैं।

सरल SHA-1 हैशिंग

l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_SH1 );

साधारण MD5 हैशिंग

l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_MD5 );

dbms_crypto.hash() का अवलोकन

हैश () फ़ंक्शन निम्न प्रकारों को स्वीकार करने के लिए अतिभारित है:रॉ, बीएलओबी, और सीएलओबी। अंतर्निहित डेटा रूपांतरण के अनुसार कच्चे स्वीकार्य इनपुट प्रकारों के लिए RAW, CHAR, VARCHAR2, NCHAR, NVARCHAR2, LONG, BLOB हैं। अन्य सभी डेटा प्रकार (DATE, TIMESTAMP, आदि) जो RAW/अंतर्निहित RAW रूपांतरण के अंतर्गत नहीं आते हैं, BLOB, और CLOB को पहले TO_CHAR() से गुजरना होगा।

यह ध्यान देने योग्य है कि dbms_crypto.hash() निम्नलिखित हैशिंग एल्गोरिदम का समर्थन करता है:

  • HASH_MD4
  • HASH_MD5
  • HASH_SH1

पासवर्ड:जस्ट इन केस

यदि आप पासवर्ड संग्रहीत कर रहे हैं, तो मेरा सुझाव है कि आप क्रिप्टोग्राफ़िक हैश (md5, sha-1, आदि) के बजाय पासवर्ड संग्रहण हैश (bcrypt, PBKDF2, या scrypt) का उपयोग करें। अंतर यह है कि पासवर्ड स्टोरेज हैश को तोड़ने में समय लगता है जबकि क्रिप्टोग्राफिक हैश जल्दी से किया जाना है। क्रूर बल के माध्यम से सिस्टम की पासवर्ड सूची पर हमला करते समय यह एक क्रिप्टोग्राफ़िक एल्गोरिदम के माध्यम से पारित नमकीन मूल्य को तोड़ने का प्रयास करते समय अधिक समय गहन परिमाण का आदेश देता है। विचार करें कि किसी एकल मान पर पासवर्ड हैश का उपयोग करने में ~ 100ms (एक प्रामाणिक लॉगिन के लिए अधिक नहीं) लग सकता है, लेकिन आपकी संपूर्ण पासवर्ड सूची में एक क्रूर बल (प्रति पासवर्ड लाखों/अरबों प्रयास) के लिए बहुत धीमा है।

Oracle को पासवर्ड हैश से नफरत है

इसके लायक होने के लिए मुझे ओरेकल के किसी भी पैकेज से अवगत नहीं है जो पासवर्ड हैशिंग समर्थन प्रदान करता है। हालांकि आप इसे 'loadjava ' और जेवीएम के भीतर जावा बीक्रिप्ट कार्यान्वयन डालना जो ओरेकल के आरडीबीएमएस के साथ चलता है। फिर आप PL/SQL रैपर अपने जावा क्लास को कॉल करने के लिए जो bcrypt लागू करता है। यदि आप एक मध्यम स्तर का उपयोग कर रहे हैं तो आप उस भाषा में उपलब्ध कई अन्य विकल्पों का उपयोग कर सकते हैं (.NET, PHP, Perl, Ruby, Python, Java, आदि) और 'loadjava' का उपयोग करने की कोशिश करना छोड़ दें।

मेरा मतलब एन्क्रिप्शन हैश नहीं है!

यदि आपको जिस हैशिंग की आवश्यकता है वह dbms_crypto.hash() द्वारा कवर नहीं है, तो आप dbms_crypto.encrypt के माध्यम से एन्क्रिप्शन की तलाश कर रहे होंगे जो बहुत समान रूप से काम करता है सिवाय इसके कि यह निम्न प्रकारों में लेता है:

  • ENCRYPT_DES
  • ENCRYPT_3DES_2KEY
  • ENCRYPT_3DES
  • ENCRYPT_AES
  • ENCRYPT_PBE_MD5DES
  • ENCRYPT_AES128
  • ENCRYPT_AES192
  • ENCRYPT_AES256

DBMS_CRYPTO पर पूर्ण 11gR2 दस्तावेज़ यहां दिए गए हैं . अन्य सभी संस्करण tahiti.oracle.com के माध्यम से उपलब्ध हैं। . बस अपने संस्करण पर क्लिक करें और फिर 'dbms_crypto' खोजें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-12560:TNS:प्रोटोकॉल एडेप्टर त्रुटि

  2. TNS-12519 w/o अधिकतम प्रक्रियाएं पहुंच गईं

  3. जबकि (rs.next ()) कथन 1 पुनरावृत्ति के बाद समाप्त क्यों हो रहा है?

  4. क्वेरी द्वारा Oracle कनेक्ट को SQL सर्वर क्वेरी में बदलें

  5. मैं डायनेमिक SQL में DDL/SCL स्टेटमेंट में बाइंड वेरिएबल्स का उपयोग क्यों नहीं कर सकता?