程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle10.2.0.1 數據加密處理教程

Oracle10.2.0.1 數據加密處理教程

編輯:Oracle數據庫基礎
 

我要介紹的是oracle10g的數據加密處理,也就是通常的密碼的加密處理,

要用到DECRYPT方法對數據解密和ENCRYPT方法加密

1.首先通過sys用戶登錄到oracle數據庫,因為我們要通過這個用戶來設置一些高級權限

grant execute on DBMS_crypto to userName;

這句是為了能讓用戶使用dbms這個方法,能夠讓我們sql語句種直接簡單的調用就可以了,否則我們將無法使用加密和解密,數據庫也會報錯,不過我忘了是什麼錯誤了,userName就是你通過程序訪問數據庫時的用戶名,

2.然後要建立一張表,這張表裡就一個字段是用來存放一個key值,這個key值是要在接下來建立的方法種使用到的固定值

CREATE TABLE KEYINFOMTBL(
KEYCODE RAW(32) NOT NULL,
CONSTRAINT KEYINFOMTBL_P PRIMARY KEY (
KEYCODE)
USING INDEX
)
/
INSERT INTO KEYINFOMTBL VALUES ( DBMS_CRYPTO.RANDOMBYTES (32) )

通過這個兩個sql語句建立表, 並給表插入一條數據,注意字段的類型是raw型的,這個也是oracle數據庫種加密要用的字段類型。

3.就是要建立一個方法,要對數據進行加密處理了,這也是關鍵的一個部分,我以前在網上看到很多文章來說明這個過程,但試了很多都不好用,我現在給出的例子完全好用,這也是我現在做的項目中使用的

CREATE OR REPLACE FUNCTION ENCRYPT
(
INPUT_STRING VARCHAR2
)
RETURN RAW
IS
ENCRYPTED_RAW RAW (100);
KEY_BYTES_RAW RAW (32);
ENCRYPTION_TYPE PLS_INTEGER :=
DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
BEGIN
SELECT KEYCODE INTO KEY_BYTES_RAW FROM KEYINFOMTBL;
ENCRYPTED_RAW := DBMS_CRYPTO.ENCRYPT
(
SRC => UTL_I18N.STRING_TO_RAW (INPUT_STRING, 'AL32UTF8'),
TYP => ENCRYPTION_TYPE,
KEY => KEY_BYTES_RAW
);
RETURN ENCRYPTED_RAW;
END;

這個方法為什麼這樣寫,還要請oracle的高手來說明了,本人也不是很了解啊!嘿嘿

4.就是要建立一個解密的方法了,

CREATE OR REPLACE FUNCTION DECRYPT
(
INPUT_RAW RAW
)
RETURN VARCHAR2
IS
OUTPUT_STRING VARCHAR2(100);
DECRYPTED_RAW RAW (100);
KEY_BYTES_RAW RAW (32);
ENCRYPTION_TYPE PLS_INTEGER :=
DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
BEGIN
SELECT KEYCODE INTO KEY_BYTES_RAW FROM KEYINFOMTBL;
DECRYPTED_RAW := DBMS_CRYPTO.DECRYPT
(
SRC => INPUT_RAW,
TYP => ENCRYPTION_TYPE,
KEY => KEY_BYTES_RAW
);
OUTPUT_STRING := UTL_I18N.RAW_TO_CHAR (DECRYPTED_RAW, 'AL32UTF8');

RETURN OUTPUT_STRING;
END;
/
5.我現在要給出一個可以應用這個兩個加密和解密的小的例子,可以很明顯的看到是如何應用的

你可以通過這個sql語句看一下我們在KEYINFOMTBL表種存的那個字段值是什麼
select UTL_I18N.RAW_TO_CHAR (KEYCODE, 'AL32UTF8') from KEYINFOMTBL;


create table testpw
(
password raw(20)
)
/

使用插入的時候只要用 ENCRYPT() 就可以將你的字符串加密了

insert into testpw values ( ENCRYPT('nvgwngw383$') );

 

你可以通過這個sql語句看到加密以後的數據效果

select UTL_I18N.RAW_TO_CHAR (password, 'AL32UTF8') from testpw;

 

通過下面的sql語句就可以將數據進行解密處理
select DECRYPT(password) from testpw;

本文完成

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved