Tutaj podaję przykład szyfrowania hasła w Oracle za pomocą pakietu DBMS_CRYPTO.
Aby to zademonstrować, utworzyłem poniższą tabelę do przechowywania typu danych ID użytkownika (USER_ID) varchar2 oraz do przechowywania nieprzetworzonego typu danych zaszyfrowanego hasła (ENC_PSW).
Utwórz tabelę
SET DEFINE OFF; CREATE TABLE ENC_DATA ( USER_ID VARCHAR2(20 BYTE), ENC_PSW RAW(2000) ) / ALTER TABLE ENC_DATA ADD ( CONSTRAINT ENC_DATA_PK PRIMARY KEY (USER_ID)) /
Przykład szyfrowania hasła w Oracle
Teraz za pomocą następującego programu PL/SQL będziemy przechowywać hasło mypassword123 dla identyfikatora użytkownika SCOTT . Klucz jest kluczową częścią szyfrowania, ponieważ aby go odszyfrować, musisz użyć tego samego klucza. Możesz użyć dowolnego klawisza alfanumerycznego o długości 16 znaków. Więcej informacji na temat pakietu DBMS_CRYPTO można znaleźć w dokumentacji Oracle.
SET SERVEROUTPUT ON;
DECLARE
l_user_id enc_data.USER_ID%TYPE := 'SCOTT';
l_user_psw VARCHAR2 (2000) := 'mypassword123';
l_key VARCHAR2 (2000) := '1234567890999999';
l_mod NUMBER
:= DBMS_CRYPTO.ENCRYPT_AES128
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
l_enc RAW (2000);
BEGIN
l_user_psw :=
DBMS_CRYPTO.encrypt (UTL_I18N.string_to_raw (l_user_psw, 'AL32UTF8'),
l_mod,
UTL_I18N.string_to_raw (l_key, 'AL32UTF8'));
DBMS_OUTPUT.put_line ('Encrypted=' || l_user_psw);
INSERT INTO enc_data (user_id, enc_psw)
VALUES (l_user_id, l_user_psw);
COMMIT;
END;
/ Wyjście
Encrypted=132BEDB1C2CDD8F23B5A619412C27B60 PL/SQL procedure successfully completed.
Sprawdź dane w tabeli ENC_DATA:
SELECT * FROM enc_data;
USER_ID ENC_PSW SCOTT 132BEDB1C2CDD8F23B5A619412C27B60
W powyższym przykładzie zaszyfrowało hasło dla identyfikatora użytkownika SCOTT i zostało zapisane w tabeli enc_data. Teraz poniżej znajduje się program PL/SQL do pobierania hasła i odszyfrowywania go.
Przykład odszyfrowywania hasła w Oracle
SET SERVEROUTPUT ON;
DECLARE
l_user_id enc_data.user_id%TYPE := 'SCOTT';
l_user_psw RAW (2000);
l_key VARCHAR2 (2000) := '1234567890999999';
l_mod NUMBER
:= DBMS_CRYPTO.ENCRYPT_AES128
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
l_dec RAW (2000);
BEGIN
SELECT enc_psw
INTO l_user_psw
FROM enc_data
WHERE user_id = l_user_id;
l_dec :=
DBMS_CRYPTO.decrypt (l_user_psw,
l_mod,
UTL_I18N.STRING_TO_RAW (l_key, 'AL32UTF8'));
DBMS_OUTPUT.put_line ('Decrypted=' || UTL_I18N.raw_to_char (l_dec));
END;
/ Wyjście
Decrypted=mypassword123 PL/SQL procedure successfully completed.
Zobacz też:
- Jak ukryć hasło w formularzach Oracle?
- Zmień hasło użytkownika Sys w Oracle
-
co dzieje się w fazie przecięcia adop w R12.2
-
Zadeklaruj wyjątek zdefiniowany przez użytkownika przy użyciu metody RAISE_APPLICATION_ERROR w bazie danych Oracle
-
Jak wypełnić tabelę kalendarza w Oracle?
-
Oracle Search wszystkie tabele wszystkie kolumny dla ciągu znaków
-
Kontrola DB zbliża się do śmierci