J'utilise Oracle 9 et JDBC et j'aimerais encyrter un objet clob lorsqu'il est inséré dans la base de données. Idéalement, je voudrais pouvoir vous suffit d'insérer le texte en clair et l'avoir crypté par une procédure stockée:Quelle est la meilleure façon de chiffrer un clob?
String SQL = "INSERT INTO table (ID, VALUE) values (?, encrypt(?))";
PreparedStatement ps = connection.prepareStatement(SQL);
ps.setInt(id);
ps.setString(plaintext);
ps.executeUpdate();
Le texte brut ne devrait pas dépasser 4000 caractères, mais rend le texte plus encryptage. Notre approche actuelle du cryptage utilise dbms_obfuscation_toolkit.DESEncrypt() mais nous ne traitons que les varchars. Est-ce que ce qui suit fonctionnera?
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;
Je suis confus au sujet de la clob temporaire; Ai-je besoin de le fermer? Ou suis-je totalement hors piste?
Éditer: Le but de l'obfuscation est d'empêcher un accès trivial aux données. Mon autre but est d'obscurcir les clobs de la même manière que nous obscurcissons déjà les colonnes varchar. L'exemple de code oracle ne traite pas des clobs qui sont où mon problème spécifique se trouve; le cryptage de varchars (plus petit que 2000 caractères) est simple.
Cela ne répond pas vraiment à la question; pour un il n'utilise pas CLOBS et pour deux il n'a pas la même sémantique que la fonction d'origine: function encrypt (texte en clob) return clob - renvoie le texte chiffré –