возникли трудности с шифрованием и дешифрованием в Oracle - PullRequest
1 голос
/ 23 марта 2019

Мое требование - зашифровать столбец 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, чтобы я мог сохранитьэто значение в том же поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...