我的要求是对varchar2列进行加密,然后将该值再次存储在同一列中,以后再想对其解密,并将实际值存储在同一列中。
我使用dbms_crypto
包,但其加密值超出了输入列的长度,因此我尝试了压缩功能,但未实现结果。
DECLARE
lv_input VARCHAR2(20) := 'shrikant';
lv_output VARCHAR2(200) ;
lv_out VARCHAR2(20);
lv_raw_again RAW(20) ;
BEGIN
dbms_output.put_line(lv_input||'lenth '||length(lv_input));
lv_output := rawtohex(DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW (lv_input), 4353,
UTL_RAW.CAST_TO_RAW ('zzzzzzzzz')));
dbms_output.put_line(lv_output||'length '||LENGTH(lv_output));
lv_raw_again := hextoraw(lv_output);
lv_out := utl_raw.cast_to_varchar2(dbms_crypto.Decrypt(src => lv_raw_again,
typ => 4353,
key => UTL_RAW.CAST_TO_RAW ('zzzzzzzzz') ));
dbms_output.put_line(lv_raw_again||'length '||LENGTH(lv_raw_again));
dbms_output.put_line(lv_out||LENGTH(lv_out));
END;
在这里,我的输入长度为8,我希望其加密结果长度也为8,这样我就可以将该值存储在同一字段中。