ORACLE字段AES算法加密、解密(解决中文乱码问题) ) ) )。
2014年02月12日17:13:37华智互联阅读数: 9797
1 .解密函数入口
createorreplacefunctionf _ znmh _ smk _ crypt (p _ srcinvarchar 2,
P_TYPE IN NUMBER )
RETURN VARCHAR2 IS
结果varchar2(4000;
比根
/* * * * * * * * * * * * * * * * * *
信息加密函数F_ZNMH_SMK_CRYPT
登门拜访:
输入P_SRC明文字符串
P_TYPE处理类型,1、加密; 2、用于解密;
返回值:
RESULT承诺返回密文字符串并返回十六进制密文字符串
异常处理:
此函数不捕获异常。 请在相应的程序模块中捕获处理异常。
加密方式:
密钥位数: AES 192 DBMS _ crypto.encrypt _ AES 192
连接方式:CBC DBMS_CRYPTO.CHAIN_CBC
填充方式: pkcs5DBMS _ crypto.pad _ pkcs 5
默认密钥:
KEY ZNMH1234
* * * * * * * * * * * * * * * *
DECLARE
keyvarchar2(20;
比根
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 );
结束If;
执行
WHEN OTHERS THEN
DMS _ output.put _ line (sqlcode : (|| sqlcode );
DMS _ output.put _ line (sqlerrm : (|| sqlerrm );
返回(result;
结束;
返回(result;
END F_ZNMH_SMK_CRYPT;
2 .加密函数
createorreplacefunctionencrypt _ function (
V_STR VARCHAR2,v _ key varchar2(返回varchar2asv _ key _ raw raw (24;
v_str_rawraw(2000;
v_return_strvarchar2(2000;
V_TYPE PLS_INTEGER;
比根
/* * * * * * * * * * * * * * * * * *
加密函数FUN_ENCRYPTION
登门拜访:
输入V_STR明文字符串
输入V_KEY键字符串。 长度为24字节
返回值:
V_RETURN_STR承诺返回密文字符串并返回十六进制密文字符串
异常处理:
此函数不捕获异常。 请在相应的程序模块中捕获处理异常。
加密方式:
密钥位数: AES 192 DBMS _ crypto.encrypt _ AES 192
连接方式:CBC DBMS_CRYPTO.CHAIN_CBC
填充方式: pkcs5DBMS _ crypto.pad _ pkcs 5
* * * * * * * * * * * * * * * *
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 3360=rawtohex (v _ str _ raw );
RETURN V_RETURN_STR;
/*执行
WHEN OTHERS THEN
返回sqlerrm|| sqlcode; */
结束;
3 .解码函数
(createorreplacefunctiondecrypt _ function (v _ str varchar 2,V_KEY VARCHAR2) ) ) ) ) ) ) )
RETURN VARCHAR2 AS
v_key_rawraw(24;
v_str_rawraw(2000;
v_return_strvarchar2(2000;
V_TYPE PLS_INTEGER;
比根
/* * * * * * * * * * * * * * * * * *
解密函数FUN_DECRYPTION
登门拜访:
输入V_STR密文字符串,约定密文为十六进制字符串
输入V_KEY键字符串。 长度为24字节
返回值:
V_RETURN_STR返回明文字符串
异常处理:
此函数不捕获异常。 请在相应的程序模块中捕获处理异常。
加密方式:
密钥位数: AES 192 DBMS _ crypto.encrypt _ AES 192
连接方式:CBC DBMS_CRYPTO.CHAIN_CBC
填充方式: pkcs5DBMS _ crypto.pad _ pkcs 5
* * * * * * * * * * * * * * * *
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 3360=utl _ i18n.raw _ to _ char (v _ str _ raw,' ZHS16GBK ' );
RETURN V_RETURN_STR;
/*执行
WHEN OTHERS THEN
返回sqlerrm|| sqlcode; */
结束;