Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Apakah Oracle memiliki fungsi hash bawaan?

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'.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kueri hierarkis

  2. Cara memasukkan data langsung dari Excel ke Oracle Database

  3. Bagaimana cara menguji izin sistem file baca/tulis dari direktori Oracle?

  4. Tipe data Tanggal Oracle, diubah menjadi 'YYYY-MM-DD HH24:MI:SS TMZ' melalui SQL

  5. Cara Memformat Angka sebagai Angka Romawi di Oracle