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

Bagaimana cara menggunakan PBKDF2 di Oracle 12c?

Ini adalah jawaban yang terlambat, tetapi sepengetahuan saya DBMS_CRYPTO Oracle paket tidak mendukung PBKDF2 secara asli. Meskipun demikian, Anda dapat mengimplementasikan algoritme sendiri; inilah salah satu cara untuk melakukannya:

CREATE OR REPLACE FUNCTION pbkdf2
  ( p_password IN VARCHAR2
  , p_salt IN VARCHAR2
  , p_count IN INTEGER
  , p_key_length IN INTEGER )
RETURN VARCHAR2
IS
    l_block_count INTEGER;
    l_last RAW(32767);
    l_xorsum RAW(32767);
    l_result RAW(32767);
BEGIN
    l_block_count := CEIL(p_key_length / 20);  -- use 20 bytes for SHA1, 32 for SHA256, 64 for SHA512

    FOR i IN 1..l_block_count LOOP
        l_last := UTL_RAW.CONCAT(UTL_RAW.CAST_TO_RAW(p_salt), UTL_RAW.CAST_FROM_BINARY_INTEGER(i, UTL_RAW.BIG_ENDIAN));
        l_xorsum := NULL;

        FOR j IN 1..p_count LOOP
            l_last := DBMS_CRYPTO.MAC(l_last, DBMS_CRYPTO.HMAC_SH1, UTL_RAW.CAST_TO_RAW(p_password));
            -- use HMAC_SH256 for SHA256, HMAC_SH512 for SHA512

            IF l_xorsum IS NULL THEN
                l_xorsum := l_last;
            ELSE
                l_xorsum := UTL_RAW.BIT_XOR(l_xorsum, l_last);
            END IF;
        END LOOP;

        l_result := UTL_RAW.CONCAT(l_result, l_xorsum);
    END LOOP;

    RETURN RAWTOHEX(UTL_RAW.SUBSTR(l_result, 1, p_key_length));
END pbkdf2;
/

Kode ini awalnya ditemukan di sini:PBKDF2 di Oracle; Saya telah mengonfirmasi bahwa ini berfungsi pada sistem saya sendiri di SHA-1, SHA-256, dan SHA-512. Perhatikan bahwa p_count adalah jumlah iterasi dan p_key_length adalah panjang kunci. Lihat pertanyaan ini untuk informasi lebih lanjut tentang jumlah iterasi yang direkomendasikan dan panjang kunci yang direkomendasikan untuk PBKDF2.

Semoga membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jalankan Oracle Client dalam mode 32-bit pada mesin 64-bit

  2. Bagaimana cara mendapatkan informasi tentang Tipe Buatan Pengguna?

  3. Aksen dan susunan huruf besar/kecil di Oracle dengan LIKE

  4. C#:Berikan tipe yang ditentukan pengguna ke prosedur tersimpan Oracle

  5. Pemulihan basis data Oracle