Ya:hashing dan enkripsi (terkait tetapi tidak persis sama) semuanya dilakukan melalui paket SYS DBMS_CRYPTO.
Hashing SHA-1 Sederhana
l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_SH1 );
Hashing MD5 Sederhana
l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_MD5 );
Ikhtisar dbms_crypto.hash()
Fungsi hash() kelebihan beban untuk menerima jenis berikut:RAW, BLOB, dan CLOB. Menurut konversi data implisit untuk jenis input mentah yang dapat diterima adalah RAW, CHAR, VARCHAR2, NCHAR, NVARCHAR2, LONG, BLOB. Semua tipe data lainnya (DATE, TIMESTAMP, dll) yang tidak tercakup dalam RAW/konversi RAW implisit, BLOB, dan CLOB harus melewati TO_CHAR() terlebih dahulu.
Perlu dicatat bahwa dbms_crypto.hash() mendukung algoritme hashing berikut:
- HASH_MD4
- HASH_MD5
- HASH_SH1
Sandi:Untuk Berjaga-jaga
Jika Anda menyimpan kata sandi, saya sarankan Anda menggunakan hash penyimpanan kata sandi (bcrypt, PBKDF2, atau scrypt) alih-alih hash kriptografis (md5, sha-1, dll). Perbedaannya adalah bahwa hash penyimpanan kata sandi dimaksudkan untuk mengambil waktu untuk dipecahkan sementara hash kriptografi dimaksudkan untuk dilakukan dengan cepat. Saat menyerang daftar kata sandi sistem melalui brute force, urutan besarnya lebih intensif saat mencoba memecahkan nilai asin yang dilewatkan melalui algoritme kriptografi. Pertimbangkan bahwa menggunakan hash kata sandi pada satu nilai dapat memakan waktu ~ 100 ms (tidak banyak untuk satu login otentik), tetapi sangat lambat untuk kekuatan kasar (jutaan/miliar upaya per kata sandi) di seluruh daftar kata sandi Anda.
Oracle Benci Kata Sandi Hash
Untuk apa nilainya, saya tidak mengetahui adanya paket dari Oracle yang menyediakan dukungan hashing kata sandi. Namun Anda dapat melakukannya dengan menggunakan 'loadjava ' dan menempatkan implementasi Java bcrypt di dalam JVM yang berjalan di dalam RDBMS Oracle. Anda kemudian dapat menggunakan pembungkus PL/SQL untuk memanggil kelas Java Anda yang mengimplementasikan bcrypt. Jika Anda menggunakan tingkat menengah, Anda dapat menggunakan banyak opsi lain yang tersedia untuk Anda dalam bahasa tersebut (.NET, PHP, Perl, Ruby, Python, Java, dll) dan lewati mencoba menggunakan 'loadjava'.
Maksud saya enkripsi bukan hash!
Jika hashing yang Anda butuhkan tidak tercakup oleh dbms_crypto.hash(), Anda mungkin mencari enkripsi melalui dbms_crypto.encrypt yang bekerja sangat mirip kecuali yang dibutuhkan dalam jenis berikut:
- ENCRYPT_DES
- ENCRYPT_3DES_2KEY
- ENCRYPT_3DES
- ENCRYPT_AES
- ENCRYPT_PBE_MD5DES
- ENCRYPT_AES128
- ENCRYPT_AES192
- ENCRYPT_AES256
Berikut adalah dokumentasi 11gR2 lengkap di DBMS_CRYPTO . Semua versi lain tersedia melalui tahiti.oracle.com . Cukup klik versi Anda lalu cari 'dbms_crypto'.