oracle实现aes解密_ORACLE 字段AES算法加密、解密

ORACLE 字段AES算法加密、解密(解决中文乱码问题)

2014年02月12日 17:13:37 华智互联 阅读数:9797

1.加解密函数入口

CREATE OR REPLACE FUNCTION F_ZNMH_SMK_CRYPT(P_SRC IN VARCHAR2,

P_TYPE IN NUMBER)

RETURN VARCHAR2 IS

RESULT VARCHAR2(4000);

BEGIN

/*************************************************

信息加密函数 F_ZNMH_SMK_CRYPT

入参:

P_SRC 输入明文字符串

P_TYPE 处理类型,1,为加密;2,为解密;

返回值:

RESULT 返回密文字符串,约定返回为 16进制密文字符串

异常处理:

此函数不对任何异常做捕捉处理,请相应的程序模块对异常做捕捉处理。

加密方式:

密钥位数:AES192 DBMS_CRYPTO.ENCRYPT_AES192

连接方式:CBC DBMS_CRYPTO.CHAIN_CBC

填充方式:PKCS5 DBMS_CRYPTO.PAD_PKCS5

默认密钥:

KEY ZNMH1234

**************************************************/

DECLARE

KEY VARCHAR2(20);

BEGIN

KEY := 'ZNMH1234';

RESULT := 'ERROR ENCRPT INFO';

--P_TYPE为1时,代表加密;2时,代表解密;

IF (P_TYPE = 1) THEN

RESULT := ENCRYPT_FUNCTION(P_SRC, KEY);

ELSIF (P_TYPE = 2) THEN

RESULT := DECRYPT_FUNCTION(P_SRC, KEY);

END IF;

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('SQLCODE : ' || SQLCODE);

DBMS_OUTPUT.PUT_LINE('SQLERRM : ' || SQLERRM);

RETURN(RESULT);

END;

RETURN(RESULT);

END F_ZNMH_SMK_CRYPT;

2.加密函数

CREATE OR REPLACE FUNCTION ENCRYPT_FUNCTION(

V_STR VARCHAR2, V_KEY VARCHAR2) RETURN VARCHAR2 AS V_KEY_RAW RAW(24);

V_STR_RAW RAW(2000);

V_RETURN_STR VARCHAR2(2000);

V_TYPE PLS_INTEGER;

BEGIN

/*************************************************

加密函数 FUN_ENCRYPTION

入参:

V_STR 输入明文字符串

V_KEY 输入密钥字符串,长度为24字节

返回值:

V_RETURN_STR 返回密文字符串,约定返回为 16进制密文字符串

异常处理:

此函数不对任何异常做捕捉处理,请相应的程序模块对异常做捕捉处理。

加密方式:

密钥位数:AES192 DBMS_CRYPTO.ENCRYPT_AES192

连接方式:CBC DBMS_CRYPTO.CHAIN_CBC

填充方式:PKCS5 DBMS_CRYPTO.PAD_PKCS5

**************************************************/

V_KEY_RAW := UTL_I18N.STRING_TO_RAW(V_KEY, 'ZHS16GBK');

V_STR_RAW := UTL_I18N.STRING_TO_RAW(V_STR, 'ZHS16GBK');

-- 指定‘密钥算法’、‘工作模式’、‘填充方式’

V_TYPE := DBMS_CRYPTO.ENCRYPT_DES + DBMS_CRYPTO.CHAIN_ECB +

DBMS_CRYPTO.PAD_PKCS5;

V_STR_RAW := DBMS_CRYPTO.ENCRYPT(SRC => V_STR_RAW,

TYP => V_TYPE,

KEY => V_KEY_RAW);

V_RETURN_STR := RAWTOHEX(V_STR_RAW);

RETURN V_RETURN_STR;

/* EXCEPTION

WHEN OTHERS THEN

RETURN SQLERRM||SQLCODE ; */

END;

3.解密函数

CREATE OR REPLACE FUNCTION DECRYPT_FUNCTION(V_STR VARCHAR2, V_KEY VARCHAR2)

RETURN VARCHAR2 AS

V_KEY_RAW RAW(24);

V_STR_RAW RAW(2000);

V_RETURN_STR VARCHAR2(2000);

V_TYPE PLS_INTEGER;

BEGIN

/************************************************

解密函数 FUN_DECRYPTION

入参:

V_STR 输入密文字符串,约定密文为16进制字符串

V_KEY 输入密钥字符串,长度为24字节

返回值:

V_RETURN_STR 返回明文字符串

异常处理:

此函数不对任何异常做捕捉处理,请相应的程序模块对异常做捕捉处理。

加密方式:

密钥位数:AES192 DBMS_CRYPTO.ENCRYPT_AES192

连接方式:CBC DBMS_CRYPTO.CHAIN_CBC

填充方式:PKCS5 DBMS_CRYPTO.PAD_PKCS5

***************************************************/

V_KEY_RAW := UTL_I18N.STRING_TO_RAW(V_KEY, 'ZHS16GBK');

V_STR_RAW := HEXTORAW(V_STR);

-- 指定‘密钥算法’、‘工作模式’、‘填充方式’

V_TYPE := DBMS_CRYPTO.ENCRYPT_DES + DBMS_CRYPTO.CHAIN_ECB +

DBMS_CRYPTO.PAD_PKCS5;

V_STR_RAW := DBMS_CRYPTO.DECRYPT(SRC => V_STR_RAW,

TYP => V_TYPE,

KEY => V_KEY_RAW);

V_RETURN_STR := UTL_I18N.RAW_TO_CHAR(V_STR_RAW, 'ZHS16GBK');

RETURN V_RETURN_STR;

/* EXCEPTION

WHEN OTHERS THEN

RETURN SQLERRM||SQLCODE ; */

END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值