हां:हैशिंग और एन्क्रिप्टिंग (संबंधित लेकिन बिल्कुल समान नहीं) सभी 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' खोजें।