मैं ओरेकल 9 और जेडीबीसी का उपयोग कर रहा हूं और डीबी में डालने के रूप में एक क्लोब को एन्क्रिप्ट करना चाहता हूं। आदर्श रूप से मैं सिर्फ सादा पाठ डालने में सक्षम होना चाहता हूं और इसे संग्रहीत प्रक्रिया द्वारा एन्क्रिप्ट किया गया है:
String SQL = "INSERT INTO table (ID, VALUE) values (?, encrypt(?))";
PreparedStatement ps = connection.prepareStatement(SQL);
ps.setInt(id);
ps.setString(plaintext);
ps.executeUpdate();
सादा पाठ 4000 अक्षरों से अधिक होने की उम्मीद नहीं है लेकिन एन्क्रिप्टिंग टेक्स्ट को लंबा बनाता है। एन्क्रिप्शन के लिए हमारा वर्तमान दृष्टिकोण dbms_obfuscation_toolkit.DESEncrypt() का उपयोग करता है लेकिन हम केवल वर्चर्स को संसाधित करते हैं। क्या निम्नलिखित काम करेंगे?
FUNCTION encrypt(p_clob IN CLOB) RETURN CLOB
IS
encrypted_string CLOB;
v_string CLOB;
BEGIN
dbms_lob.createtemporary(encrypted_string, TRUE);
v_string := p_clob;
dbms_obfuscation_toolkit.DESEncrypt(
input_string => v_string,
key_string => key_string,
encrypted_string => encrypted_string );
RETURN UTL_RAW.CAST_TO_RAW(encrypted_string);
END;
मैं अस्थायी clob के बारे में उलझन में हूँ; क्या मुझे इसे बंद करने की ज़रूरत है? या मैं पूरी तरह से ऑफ-ट्रैक हूँ?
संपादित करें:
Obfuscation का उद्देश्य डेटा तक छोटी पहुंच को रोकने के लिए है। मेरा दूसरा उद्देश्य क्लब्स को उसी तरह से खराब करना है जिस तरह से हम पहले से ही वर्चर्स कॉलम को खराब कर रहे हैं। ऑरैकल नमूना कोड क्लब्स से निपटता नहीं है, जहां मेरी विशिष्ट समस्या है; वर्चर्स एन्क्रिप्टेड (2000 वर्णों से छोटे) सरल है।