The encrypted raw will be a multiple of 32 bytes depending on the size of the input:
create or replace procedure encr ( input_string varchar2 ) as
encrypted_raw RAW (2000); -- stores encrypted binary text
num_key_bytes NUMBER := 192/8; -- key length 256 bits (32 bytes)
key_bytes_raw RAW (32); -- stores 256-bit encryption key
encryption_type PLS_INTEGER := -- total encryption type
DBMS_CRYPTO.ENCRYPT_AES192
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
BEGIN
DBMS_OUTPUT.PUT_LINE ( 'Original string: ' || input_string);
key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES (num_key_bytes);
encrypted_raw := DBMS_CRYPTO.ENCRYPT
(
src => UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'),
typ => encryption_type,
key => key_bytes_raw,
iv => null
);
DBMS_OUTPUT.PUT_LINE ('Encrypted raw len: ' || lengthb(encrypted_raw));
end encr;
/
exec encr('1');
Original string: 1
Encrypted raw len: 32
exec encr('123456789ABCDEF');
Original string: 123456789ABCDEF
Encrypted raw len: 32
exec encr('123456789ABCDEF0');
Original string: 123456789ABCDEF0
Encrypted raw len: 64
exec encr('123456789ABCDEF0123456789ABCDEF0');
Original string: 123456789ABCDEF0123456789ABCDEF0
Encrypted raw len: 96
That said, you shouldn't choose your encryption based on "space overhead"! Choose based on your security requirements