Sì: hashing e crittografia (correlati ma non esattamente identici) vengono eseguiti tramite il pacchetto SYS DBMS_CRYPTO.
semplice SHA-1 Hashing
l_hash := dbms_crypto.hash(l_src, dbms_crypto.HASH_SH1);
Semplice MD5 Hashing
l_hash := dbms_crypto.hash(l_src, dbms_crypto.HASH_MD5);
Panoramica dbms_crypto.hash()
La funzione di hash() è sovraccarico per accettare i seguenti tipi: RAW, BLOB, a nd CLOB. Secondo lo implicity data conversions per i tipi di input accettabili non elaborati sono RAW, CHAR, VARCHAR2, NCHAR, NVARCHAR2, LONG, BLOB. Tutti gli altri tipi di dati (DATE, TIMESTAMP, ecc.) Non coperti dalla conversione RAW/implicita RAW, BLOB e CLOB dovranno prima essere passati attraverso TO_CHAR().
Vale la pena notare che dbms_crypto.hash() supporta i seguenti algoritmi di hashing:
- HASH_MD4
- HASH_MD5
- HASH_SH1
password: nel caso in cui
Se si memorizzano le password, Suggerisco di utilizzare un hash di memorizzazione password (bcrypt, PBKDF2 o scrypt) invece di un hash crittografico (md5, sha-1, ecc.). La differenza è che gli hash di memorizzazione delle password hanno bisogno di tempo per interrompersi mentre gli hash crittografici devono essere eseguiti rapidamente. Quando si attacca un elenco di password di un sistema tramite la forza bruta, gli ordini di grandezza richiedono più tempo quando si tenta di interrompere un valore salato che viene passato attraverso un algoritmo crittografico. Considera che l'uso di un hash della password su un singolo valore può richiedere ~ 100ms (non molto per un singolo login autentico), ma molto lento per una forza bruta (milioni/miliardi di tentativi per password) sull'intero elenco di password.
Oracle Hates password Hash
Per quello che il suo valore non sono a conoscenza di eventuali pacchetti da Oracle che forniscono il supporto hashing delle password. Tuttavia, è possibile farlo utilizzando "loadjava" e inserendo un'implementazione di bcrypt Java all'interno della JVM che viene eseguita con l'RDBMS di Oracle. È quindi possibile utilizzare un PL/SQL wrapper per chiamare la classe Java che implementa bcrypt. Se si utilizza un livello intermedio, è possibile utilizzare molte altre opzioni disponibili in tale lingua (.NET, PHP, Perl, Ruby, Python, Java, ecc.) E saltare cercando di utilizzare "loadjava".
Intendevo la crittografia non hash!
Nel caso in cui l'hashing avete bisogno non è coperto da dbms_crypto.hash(), si potrebbe essere alla ricerca per la crittografia tramite dbms_crypto.encrypt che funziona in modo molto simile, tranne che ci vuole nelle seguenti tipologie:
- ENCRYPT_DES
- ENCRYPT_3DES_2KEY
- ENCRYPT_3DES
- ENCRYPT_AES
- ENCRYPT_PBE_MD5DES
- ENCRYPT_AES128
- ENCRYPT_AES192
- ENCRYPT_AES256
Ecco il pieno 11gR2 documentation on DBMS_CRYPTO. Tutte le altre versioni sono disponibili tramite tahiti.oracle.com. Basta fare clic sulla tua versione e quindi cercare 'dbms_crypto'.
Vedere dbms_crypto.hash http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_crypto.htm#ARPLS65700. Non vedo una versione che richiede NCLOB, non so come se 'src IN CLOB CHARACTER SET ANY_CS' potrebbe prendere una NCLOB senza perdita in tutti i casi. Qualcosa da investigare. –
Questa domanda non è un * esatto * duplicato. Esistono alcune differenze sottili ma significative tra l'hashing di un NCLOB o di un VARCHAR2. In particolare, l'hashing di una NCLOB potrebbe non essere deterministico se si utilizza ORA_HASH, quindi una delle risposte per l'altra domanda potrebbe non essere appropriata. Vedere la mia risposta qui per informazioni su hashing deterministico: http://stackoverflow.com/a/9476696/409172 –