oracle 字段加密解密方法

要用到DECRYPT方法對數(shù)據(jù)解密和ENCRYPT方法加密

? ? 1.首先通過sys用戶登錄到oracle數(shù)據(jù)庫,因為我們要通過這個用戶來設(shè)置一些高級權(quán)限

? ? ? grant execute on DBMS_crypto to userName;

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

? ? ? 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語句建立表, 并給表插入一條數(shù)據(jù),注意字段的類型是raw型的,這個也是oracle數(shù)據(jù)庫種加密要用的字段類型。

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

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;

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.我現(xiàn)在要給出一個可以應(yīng)用這個兩個加密和解密的小的例子,可以很明顯的看到是如何應(yīng)用的

你可以通過這個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語句看到加密以后的數(shù)據(jù)效果

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


通過下面的sql語句就可以將數(shù)據(jù)進行解密處理

select DECRYPT(password) from testpw;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在oracle中,可以使用其自帶的加密函數(shù),使得應(yīng)用部分不必關(guān)心加密的細節(jié),只需要在sql語句中對對應(yīng)的字段進行加...
    落日種子閱讀 1,247評論 3 2
  • “回眸一笑百媚生,六宮粉黛無顏色”,當時背誦《長恨歌》到這一句時總想不明白怎樣的笑容能夠讓萬紫千紅都瞬間失了顏色呢...
    一顆懶蛋蛋閱讀 3,567評論 0 0
  • 當繁文縟節(jié)遇上不拘小節(jié),當墨守成規(guī)遇上打破常規(guī),當老規(guī)矩遇上現(xiàn)代人,創(chuàng)新便開始了,新時代已悄然走近,新思想引領(lǐng)我們...
    淮北師范大學(xué)張曼閱讀 647評論 0 1
  • People should search two things in your life: one is the ...
    Kenny18803閱讀 162評論 0 0

友情鏈接更多精彩內(nèi)容