在oracle中进行加密和解密时遇到困难

时间:2019-03-23 12:08:15

标签: encryption plsql oracle11g

我的要求是对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,这样我就可以将该值存储在同一字段中。

0 个答案:

没有答案