2012-06-17 21 views
14

Powiel możliwe:
Is there any hash function in PL/SQL?Czy Oracle ma wbudowaną funkcję skrótu?

Mam kolumnę NCLOB typu bazy danych Oracle 11g. Muszę uzyskać wartość mieszającą dla jej zawartości. Jak mogę to zrobić za pomocą dowolnej wbudowanej funkcji Oracle lub wewnątrz PL/SQL SP w Oracle?

+0

Zobacz dbms_crypto.hash http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_crypto.htm#ARPLS65700. Nie widzę wersji, która ma NCLOB, nie wiem, jak gdyby 'src IN CLOB CHARACTER SET ANY_CS' mógł wziąć NCLOB bez strat we wszystkich przypadkach. Coś do zbadania. –

+0

To pytanie nie jest * dokładnym * duplikatem. Istnieją pewne subtelne, ale znaczące różnice między hashowaniem NCLOB lub VARCHAR2. W szczególności, mieszanie NCLOB może nie być deterministyczne, jeśli używasz ORA_HASH, więc jedna z odpowiedzi dla drugiego pytania może nie być odpowiednia. Zobacz moją odpowiedź tutaj dla informacji na temat deterministycznego mieszania: http://stackoverflow.com/a/9476696/409172 –

Odpowiedz

38

Tak: hashowanie i szyfrowanie (powiązane, ale nie do końca takie same) są wykonywane za pośrednictwem pakietu SYS DBMS_CRYPTO.

prosty SHA-1 Hashing

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

prosty MD5 Hashing

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

Przegląd dbms_crypto.hash()

Funkcja mieszająca() jest przeciążony akceptować następujące typy: RAW, BLOB, a nd CLOB. Zgodnie z implicity data conversions dla surowych dopuszczalnych typów wejściowych są RAW, CHAR, VARCHAR2, NCHAR, NVARCHAR2, LONG, BLOB. Wszystkie inne typy danych (DATE, TIMESTAMP, itd.) Nieobjęte RAW/niejawną konwersją RAW, BLOB i CLOB muszą być najpierw przekazane przez TO_CHAR().

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

  • 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ą zająć trochę czasu, a skróty kryptograficzne powinny zostać wykonane szybko. Podczas atakowania listy haseł systemowych za pomocą brutalnej siły, jej kolejność jest o wiele większa, gdy próbuje się złamać soloną wartość, która jest przekazywana przez algorytm kryptograficzny. Weź pod uwagę, że użycie skrótu hasła do pojedynczej wartości może zająć około 100ms (niewiele za jeden autentyczny login), ale bardzo powolne w przypadku brutalnej siły (miliony/miliardy prób na hasło) na całej liście haseł.

Oracle Hates hasło wartości mieszania

za to, co warto nie jestem świadom wszelkich opakowań z Oracle, które zapewniają wsparcie hasło mieszającego. Można to jednak osiągnąć, używając "loadjava" i umieszczając implementację bcrypt Java w JVM, która działa z RDBMS Oracle. Następnie możesz użyć PL/SQL wrapper, aby wywołać twoją klasę Java, która implementuje bcrypt. Jeśli używasz warstwy pośredniej, możesz użyć wielu innych opcji dostępnych w tym języku (.NET, PHP, Perl, Ruby, Python, Java itp.) I pomiń próbę użycia "loadjava".

Chodziło mi o szyfrowanie bez skrótów!

W przypadku mieszania trzeba nie są objęte dbms_crypto.hash(), to może być patrząc na szyfrowanie poprzez dbms_crypto.encrypt która działa bardzo podobnie poza tym, że bierze w następujących rodzajach:

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

Oto pełna 11gR2 documentation on DBMS_CRYPTO. Wszystkie pozostałe wersje są dostępne pod numerem tahiti.oracle.com. Po prostu kliknij swoją wersję, a następnie wyszukaj "dbms_crypto".

+0

Pod pewnymi względami jest to lepsza odpowiedź niż zaakceptowana odpowiedź w duplikacie pytania. Przykłady kodu i szczegóły, w przeciwieństwie do linku do przewodnika. –

+0

OTOH, i naprawdę warte -1, jeden na ogół nie chce używać kryptograficznego hasha soli + hasło, nie szyfrowanie, do przechowywania haseł (chyba, że ​​musisz być w stanie wyodrębnić hasło, ale przerażające.) Patrz http: // security.stackexchange.com/questions/8945/what-is-the-use-of-password-encryption –

+0

@ShannonSeverance Obawiam się, że nie mogę bardziej logicznie argumentować, niż linkować artykuł do kogoś, kto jest ekspertem; proszę przyjmij moje przeprosiny. Jeśli masz myśli w tej sprawie, zawsze jestem otwarty na nowe pomysły. Pracuję nad obecnym założeniem, że niesolone algorytmy szyfrowania i niesforne algorytmy haszowania są zarówno odwracalne. Hashe są jednym ze sposobów, dopóki ktoś ich nie odwróci, co nie jest długotrwałe. Mając to na uwadze, rozważmy, co jest w nich różne. http://krebsonsecurity.com/2012/06/how-companies-can-beef-up-password-security/ –

Powiązane problemy