यह देर से उत्तर है, लेकिन मेरी जानकारी के अनुसार Oracle का DBMS_CRYPTO
पैकेज मूल रूप से PBKDF2 का समर्थन नहीं करता है। उस ने कहा, आप स्वयं एल्गोरिदम लागू कर सकते हैं; इसे करने का एक तरीका यह है:
CREATE OR REPLACE FUNCTION pbkdf2
( p_password IN VARCHAR2
, p_salt IN VARCHAR2
, p_count IN INTEGER
, p_key_length IN INTEGER )
RETURN VARCHAR2
IS
l_block_count INTEGER;
l_last RAW(32767);
l_xorsum RAW(32767);
l_result RAW(32767);
BEGIN
l_block_count := CEIL(p_key_length / 20); -- use 20 bytes for SHA1, 32 for SHA256, 64 for SHA512
FOR i IN 1..l_block_count LOOP
l_last := UTL_RAW.CONCAT(UTL_RAW.CAST_TO_RAW(p_salt), UTL_RAW.CAST_FROM_BINARY_INTEGER(i, UTL_RAW.BIG_ENDIAN));
l_xorsum := NULL;
FOR j IN 1..p_count LOOP
l_last := DBMS_CRYPTO.MAC(l_last, DBMS_CRYPTO.HMAC_SH1, UTL_RAW.CAST_TO_RAW(p_password));
-- use HMAC_SH256 for SHA256, HMAC_SH512 for SHA512
IF l_xorsum IS NULL THEN
l_xorsum := l_last;
ELSE
l_xorsum := UTL_RAW.BIT_XOR(l_xorsum, l_last);
END IF;
END LOOP;
l_result := UTL_RAW.CONCAT(l_result, l_xorsum);
END LOOP;
RETURN RAWTOHEX(UTL_RAW.SUBSTR(l_result, 1, p_key_length));
END pbkdf2;
/
यह कोड मूल रूप से यहां पाया गया था:Oracle में PBKDF2; मैंने पुष्टि की है कि यह SHA-1, SHA-256 और SHA-512 में मेरे अपने सिस्टम पर काम करता है। ध्यान दें कि p_count
पुनरावृत्तियों की संख्या है और p_key_length
कुंजी की लंबाई है। PBKDF2 के लिए अनुशंसित पुनरावृत्तियों की संख्या और अनुशंसित कुंजी लंबाई के बारे में अधिक जानकारी के लिए यह प्रश्न देखें।
आशा है कि यह मदद करता है।