Зашифрованный / дешифрующий нуль с использованием DBMS_crypto

Я искал по всему интернету, что произошло, когда вы шифровали нулевое значение и расшифровывали его.

Пока что в моем эксперименте. В моей таблице есть столбец, который является меткой времени. У меня есть несколько строк данных, в этих нескольких строках у меня есть правильная временная метка и нулевое значение.

Я попытался это:

select count(*) from mytable where key = 'currLoginTime' and
  to_timestamp(clob_substr(decrypt(value,?), 19, 1), 'YYYY-MM-DD HH24:MI:SS') > ?

Первый параметр - это мой закрытый ключ, а второй - дата, с которой я сравниваю.

Я продолжаю получать следующее исключение:

ORA-01841: (full) year must be between -4713 and +9999, and not be 0;
nested exception is java.sql.SQLDataException: ORA-01841: (full) year must be
between -4713 and +9999, and not be 0

Я предполагаю, что исходное нулевое значение расшифровывается до 0. Может кто-то подтвердить или пролить некоторый свет на это? Я действительно в тупик.

1 ответ

Шифрование или дешифрование нуля приводит к нулю. Это не имело бы большого смысла, чтобы это работало любым другим способом. Показывать:

var typ number;
var key varchar2(32);
begin
  :typ := dbms_crypto.encrypt_aes256
     + dbms_crypto.chain_cbc
     + dbms_crypto.pad_pkcs5;
  :key := dbms_crypto.randombytes(32);
end;
/

set null '(null)'

select dbms_crypto.encrypt(src=>utl_i18n.string_to_raw(null, 'AL32UTF8'),
  typ=>:typ, key=>:key) as encrypted
from dual;

ENCRYPTED                    
------------------------------
(null)                         

select utl_i18n.raw_to_char(dbms_crypto.decrypt(src=>null,
  typ=>:typ, key=>:key)) as plain
from dual;

PLAIN                        
------------------------------
(null)                         

Ошибка, которую вы получаете, не из-за нулевых значений. По крайней мере одно из ваших ненулевых значений кажется недействительным - исходное текстовое значение, которое было зашифровано, не было в формате, который вы to_timestamp() звонок ожидается.

Другие вопросы по тегам