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;

ORACLE 字段AES算法加密、解密的更多相关文章

  1. C#与Java互通AES算法加密解密

    /// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...

  2. .NET与Java互通AES算法加密解密

    /// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...

  3. PHP实现sha1加密AES算法加密解密数据

    一.加密代码如下: /** * * @param string $string 需要加密的字符串 * @param string $key 密钥 * @return string */ public ...

  4. PHP AES的加密解密

    AES加密算法 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

  5. Golang之AES/DES加密解密

    AES/DES加密/解密涉及4个概念:1. Block, 也叫分组, 相应加密/解密的算法. 2. BlockMode, 模式, 相应加密/解密的处理.3. InitalVectory, 初始向量4. ...

  6. 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. AES在线加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各种加密解密源码

    一.AES在线加密解密:AES 128/192/256位CBC/CFB/ECB/OFB/PCBC在线加密解密|在线工具|在线助手|在线生成|在线制作 http://www.it399.com/aes ...

  8. PHP7.* AES的加密解密

    之前写过一篇: PHP AES的加密解密-----[弃用] 使用的是php5.*之前的mcrypt_decrypt 函数,该函数已经在php7.1后弃用了,上马的是openssl的openssl_en ...

  9. PHP AES的加密解密-----【弃用】

    mcrypt_decrypt在PHP7.*已经被弃用,取而代之的是openssl_decrypt/encrypt,请参考: PHP7.* AES的加密解密 AES加密算法 密码学中的高级加密标准(Ad ...

随机推荐

  1. HIbernate处理数据更新丢失

    使用乐观锁的机制处理: 第一步: 在持久类中添加version属性,并且添加对应的get.set方法; 第二步: 在全局配置文件中配置节点<version name="version& ...

  2. 基于时间的 SQL注入研究

    SQL注入攻击是业界一种非常流行的攻击方式,是由rfp在1998年<Phrack>杂志第54期上的“NT Web Technology Vulnerabilities”文章中首次提出的.时 ...

  3. 本地测试使用Tomcat,生产环境使用GlassFish。

    总结:Tomcat8 = javaee7规范(servlet3.1 + jsp2.3 + el3.0 + websocket1.0) + java7 [配置初始化参数使用jdk8编译]conf/web ...

  4. Zipkin 分布式数据追踪系统

    Zipkin 是一个分布式数据追踪系统,适用于微服务架构下的调用链路数据采集及分析工作. 可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈. ...

  5. localStorage用法

    引用:https://www.cnblogs.com/st-leslie/p/5617130.html const STORAGE_KEY = 'todos-vuejs'; export defaul ...

  6. js中 onreadystatechange 和 onload的区别

    IE的script 元素只支持onreadystatechange事件,不支持onload事件. FF的script 元素不支持onreadystatechange事件,只支持onload事件. 如果 ...

  7. 检查CentOS7定时任务是否启用并执行过

    1 监控cron状态 service crontab status #如果没有开启执行 service crontab start 正常开启的状态 2 检查执行日志,过滤自己配置的定时任务脚本关键字 ...

  8. 3年java工作经验必备技能

    3年工作经验的Java程序员应该具备的技能 一.Java基础 1.String类为什么是final的. 2.HashMap的源码,实现原理,底层结构. 3.反射中,Class.forName和clas ...

  9. java基础梳理--朝花夕拾(三)

    1.了解面向对象的编程思想以及面向对象的特性: 对象: EveryThing is Object: 万物皆是对象,在程序中,我们可以将类.接口.方法.属性等都认为是对象: 面向对象: 是一种程序设计方 ...

  10. 围在栅栏中的爱WriteUp(附QWE密码加解密脚本)

    题目的链接:http://www.shiyanbar.com/ctf/1917 1.首先题目给出的是摩尔斯电码: 在下面的网站上解密:https://www.cryptool.org/en/cto-c ...