Eu folosesc Oracle 9 și JDBC și aș dori să encyrpt un clob așa cum este inserat în DB. În mod ideal, aș vrea să pot introduce textul plaintei și să îl cript prin procedură stocată:
String SQL = "INSERT INTO table (ID, VALUE) values (?, encrypt(?))";
PreparedStatement ps = connection.prepareStatement(SQL);
ps.setInt(id);
ps.setString(plaintext);
ps.executeUpdate();
Plaintext nu este de așteptat să depășească 4000 de caractere, dar criptarea face textul mai lung. Abordarea noastră actuală la criptare folosește dbms_obfuscation_toolkit.DESEncrypt (), dar procesăm doar varchars. Vor funcționa următoarele?
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;
Sunt confuz cu privire la clobotul temporar; trebuie să-l închid? Sau sunt total off-track?
Editați | ×:
Scopul obfuscării este de a împiedica accesul trivial la date. Altul meu scop este de a obfusc clobsul în același mod în care deja încurcăm coloanele varchar. Codul eșantionului oracol nu se ocupă de clobs, unde se află problema mea specifică; criptarea varcharelor (mai mici de 2000 de caractere) este simplă.