Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle има ли вградена хеш функция?

Да:хеширането и криптирането (свързани, но не съвсем еднакви) се извършват чрез SYS пакета DBMS_CRYPTO.

Просто хеширане на SHA-1

l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_SH1 );

Просто хеширане на MD5

l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_MD5 );

Общ преглед на dbms_crypto.hash()

Функцията hash() е претоварена, за да приеме следните типове:RAW, BLOB и CLOB. Според имплицитни преобразувания на данни за необработени приемливи типове вход са RAW, CHAR, VARCHAR2, NCHAR, NVARCHAR2, LONG, BLOB. Всички други типове данни (DATE, TIMESTAMP и т.н.), които не са обхванати от RAW/имплицитно RAW преобразуване, BLOB и CLOB, ще трябва първо да бъдат предадени през TO_CHAR().

Струва си да се отбележи, че dbms_crypto.hash() поддържа следните алгоритми за хеширане:

  • HASH_MD4
  • HASH_MD5
  • HASH_SH1

Пароли:За всеки случай

Ако съхранявате пароли, предлагам да използвате хеш за съхранение на пароли (bcrypt, PBKDF2 или scrypt) вместо криптографски хеш (md5, sha-1 и т.н.). Разликата е, че хешовете за съхранение на пароли са предназначени да отнемат време за разбиване, докато криптографските хешове са предназначени да се правят бързо. Когато атакувате списъка с пароли на системата чрез груба сила, това отнема много повече време, когато се опитва да пробие солирана стойност, която се предава през криптографски алгоритъм. Помислете, че използването на хеш парола за една стойност може да отнеме ~100ms (не много за едно автентично влизане), но много бавно за груба сила (милиони/милиарди опити за парола) за целия ви списък с пароли.

Oracle мрази хешовете на пароли

Колкото и да си струва, не знам за пакети от Oracle, които осигуряват поддръжка за хеширане на пароли. Можете обаче да постигнете това, като използвате 'loadjava ' и поставяне на реализация на Java bcrypt в JVM, която работи с RDBMS на Oracle. След това можете да използвате PL/SQL обвивка за да извикате вашия Java клас, който прилага bcrypt. Ако използвате средно ниво, можете да използвате много други опции, достъпни за вас на този език (.NET, PHP, Perl, Ruby, Python, Java и т.н.) и да пропуснете опитите да използвате „loadjava“.

Имах предвид криптиране, а не хешове!

В случай че хеширането, от което се нуждаете, не се покрива от dbms_crypto.hash(), може да търсите криптиране чрез dbms_crypto.encrypt, което работи много подобно, с изключение на това, че приема следните типове:

  • ENCRYPT_DES
  • ENCRYPT_3DES_2KEY
  • ENCRYPT_3DES
  • ENCRYPT_AES
  • ENCRYPT_PBE_MD5DES
  • ENCRYPT_AES128
  • ENCRYPT_AES192
  • ENCRYPT_AES256

Ето пълната 11gR2 документация за DBMS_CRYPTO . Всички други версии са достъпни чрез tahiti.oracle.com . Просто щракнете върху вашата версия и след това потърсете „dbms_crypto“.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да стартирате Opatch в неинтерактивна форма

  2. Връщане на таблица в PL/SQL функция

  3. Как да пишете в CSV файл с помощта на Oracle SQL*Plus

  4. Как да добавите „ON DELETE CASCADE“ в израза ALTER TABLE

  5. Виждайки ORA-01858:намерен е нецифров знак, където се очаква число