我正在使用 Oracle 9 和 JDBC,并希望在将 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() 但我们只处理 varchars。下面的工作吗?
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 列相同的方式混淆 clob。oracle 示例代码不处理我的具体问题所在的 clob;加密 varchars(小于 2000 个字符)很简单。