Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy Oracle ma wbudowaną funkcję skrótu?

Tak:haszowanie i szyfrowanie (powiązane, ale nie dokładnie to samo) są wykonywane za pośrednictwem pakietu SYS DBMS_CRYPTO.

Proste haszowanie SHA-1

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

Proste haszowanie MD5

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

Przegląd dbms_crypto.hash()

Funkcja hash() jest przeciążona, aby zaakceptować następujące typy:RAW, BLOB i CLOB. Według niejawnych konwersji danych dla surowych akceptowalnych typów danych wejściowych to RAW, CHAR, VARCHAR2, NCHAR, NVARCHAR2, LONG, BLOB. Wszystkie inne typy danych (DATE, TIMESTAMP itp.), które nie są objęte konwersją RAW/niejawną RAW, BLOB i CLOB, będą musiały zostać najpierw przekazane przez TO_CHAR().

Warto zauważyć, że dbms_crypto.hash() obsługuje następujące algorytmy haszujące:

  • HASH_MD4
  • HASH_MD5
  • HASH_SH1

Hasła:na wszelki wypadek

Jeśli przechowujesz hasła, sugeruję użycie skrótu do przechowywania haseł (bcrypt, PBKDF2 lub scrypt) zamiast skrótu kryptograficznego (md5, sha-1 itp.). Różnica polega na tym, że skróty do przechowywania haseł mają trochę czasu na złamanie, podczas gdy skróty kryptograficzne mają być wykonywane szybko. Atakując systemową listę haseł metodą brute force, próba złamania zasolonej wartości, która jest przekazywana przez algorytm kryptograficzny, jest o rząd wielkości bardziej czasochłonna. Weź pod uwagę, że użycie skrótu hasła dla pojedynczej wartości może zająć ~ 100 ms (niewiele dla pojedynczego autentycznego logowania), ale bardzo wolno w przypadku brutalnej siły (miliony/miliardy prób na hasło) na całej liście haseł.

Oracle nienawidzi skrótów haseł

Co to jest warte, nie znam żadnych pakietów od Oracle, które zapewniają obsługę haszowania haseł. Możesz to jednak osiągnąć, używając „loadjava ' i umieszczenie implementacji Java bcrypt w JVM, która działa z Oracle RDBMS. Następnie możesz użyć opakowania PL/SQL do wywołania twojej klasy Java, która implementuje bcrypt. Jeśli używasz warstwy środkowej, możesz użyć wielu innych opcji dostępnych w tym języku (.NET, PHP, Perl, Ruby, Python, Java itp.) i pominąć próbę użycia „loadjava”.

Miałem na myśli szyfrowanie, a nie hasze!

Jeśli potrzebne hashowanie nie jest objęte dbms_crypto.hash(), możesz szukać szyfrowania przez dbms_crypto.encrypt, który działa bardzo podobnie, z wyjątkiem następujących typów:

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

Oto pełna dokumentacja 11gR2 dotycząca DBMS_CRYPTO . Wszystkie inne wersje są dostępne na tahiti.oracle.com . Po prostu kliknij swoją wersję, a następnie wyszukaj „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. Znajdowanie zduplikowanych wpisów w tabeli

  2. Oracle:LIKE gdzie dowolna część jednego ciągu pasuje do dowolnej części innego ciągu

  3. Jak indeksować kolumnę T/N w Oracle?

  4. Jak wykonać wyzwalacz i procedurę w Oracle?

  5. Kroczące 90-dniowe okno daty w SQL Oracle