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