«

»

Ago 26

Criptare e Decriptare una colonna del DB2 IBMi (AS400) con funzioni SQL

Per gestire la criptazione di un campo del DB2 IBMi (AS/400) si possono usare vari metodi (API, FieldProc, …) tra cui delle comode funzioni SQL.

Dalla versione del sistema operativo V5R3 esistono le funzioni SQL ENCRYPT e DECRYPT_CHAR.

E’ necessario che il campo della tabella sia definito con uno dei seguenti tipi:

CHAR FOR BIT DATA, VARCHAR FOR BIT DATA, BINARY, VARBINARY oppure BLOB

Di seguito viene mostrato un semplice utilizzo di queste funzioni:

CREATE TABLE MyTable (PWD VARCHAR(50) FOR BIT DATA);
SET ENCRYPTION PASSWORD = 'chiave_di_cifratura';
INSERT INTO MyTable (PWD) VALUES ENCRYPT('MiaPassword');
SELECT DECRYPT_CHAR(PWD) FROM MyTable;

come si nota dall’esempio, prima delle ultime due istruzioni che mostrano come cifrare e decifrare il campo PWD viene eseguita l’istruzione SET ENCRYPTION PASSWORD per impostare la chiave di cifratura.

Se non voglio impostare la chiave con SET ENCRYPTION PASSWORD posso anche specificarla come parametro delle funzioni di cifratura (ENCRYPT) e decifratura (DECRYPT_CHAR). Esempio:

INSERT INTO MyTable (PWD) VALUES ENCRYPT('MiaPassword', 'chiave_di_cifratura');
SELECT DECRYPT_CHAR(PWD,'chiave_di_cifratura') FROM MyTable;

L’algoritmo di cifratura utilizzato dal comando ENCRYPT è l’ormai obsoleto RC2 (block cipher with padding), però se la versione del sistema operativo è V5R3 non si ha altra scelta.

Per le versioni successive del sistema operativo sono stati aggiunti altri comandi con algoritmi più forti:

ENCRYPT_TDES = Triple DES (Release V5R4)

ENCRYPT_AES = AES (Advanced Encryption Standard) (Release V6R1)

Ovviamente il comando ENCRYPT viene mantenuto anche nelle versioni successive alla V5R3 ma continua ad utilizzare l’algoritmo RC2.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>