我使用的是Oracle 9和JDBC,想因爲它是插入到數據庫到encyrpt一個CLOB。理想情況下,我想能夠只是插入明文,並經一個存儲過程加密:什麼是加密clob的最佳方式?
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(),但我們將只處理VARCHAR處理。以下的工作?
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感到困惑;我需要關閉它嗎?或者我完全偏離軌道?
編輯:混淆的 的目的是爲了防止數據瑣碎的訪問。我的另一個目的是以與我們已經混淆varchar列相同的方式混淆clobs。 oracle示例代碼不涉及clobs,這是我的具體問題所在;加密varchars(小於2000個字符)很簡單。
這並沒有真正回答這個問題;對於一個它不使用CLOBS,對於兩個它不具有與原始函數相同的語義: 函數encrypt(clob中的明文)返回clob - 返回密碼文本 – 2008-09-24 14:26:54