1、oracle中加密function

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, 'UTF8');

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

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

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;2、oracle中解密function

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, 'UTF8');

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, 'UTF8');

RETURN V_RETURN_STR;

/* EXCEPTION

WHEN OTHERS THEN

RETURN SQLERRM||SQLCODE ; */

END;

测试sql:

加密:SELECT ENCRYPT_FUNCTION('1', '1111aaaa') FROM DUAL

输出:A23A359C2B1946A6

解密:SELECT DECRYPT_FUNCTION('A23A359C2B1946A6', '1111aaaa') FROM DUAL

输出:1

在上述function定义中声明的:

V_TYPE := DBMS_CRYPTO.ENCRYPT_DES + DBMS_CRYPTO.CHAIN_ECB + DBMS_CRYPTO.PAD_PKCS5;

与java中默认的参数一直,以保证和java跨平台的加解密可以顺利执行。上述代码是针对des算法进行的,也可进行其他的配置

Oracle 加密包 DBMS_CRYPTO 中有好多不能定义参数的常量,可参考文章:http://blog.itpub.net/post/16888/215845/

Oracle DBMS_CRYPTO

Version 10.2

General Information

Source

{ORACLE_HOME}/rdbms/admin/dbmsobtk.sql

Algorithm Constants

Name

Data Type

Value

Hash Functions

HASH_MD4 (128 bit hash)

PLS_INTEGER

1

HASH_MD5 (128 bit hash)

PLS_INTEGER

2

HASH_SH1 (160 bit hash)

PLS_INTEGER

3

MAC Functions

HMAC_MD5 (128 bit hash)

PLS_INTEGER

1

HMAC_SH1 (160 bit hash)

PLS_INTEGER

2

Block Cipher Algorithms

ENCRYPT_DES (56 bit)

PLS_INTEGER

1; -- 0x0001

ENCRYPT_3DES_2KEY (128 bit)

PLS_INTEGER

2; -- 0x0002

ENCRYPT_3DES

PLS_INTEGER

3; -- 0x0003

ENCRYPT_AES128 (128 bit)

PLS_INTEGER

6; -- 0x0006

ENCRYPT_AES192 (192 bit)

PLS_INTEGER

7; -- 0x0007

ENCRYPT_AES256 (256 bit)

PLS_INTEGER

8; -- 0x0008

ENCRYPT_RC4 (Stream Cipher)

PLS_INTEGER

129; -- 0x0081

Block Cipher Chaining Modifiers

CHAIN_CBC (Cipher Block Chaining)

PLS_INTEGER

256; -- 0x0100

CHAIN_CFB (Cipher Feedback)

PLS_INTEGER

512; -- 0x0200

CHAIN_ECB (Electronic cookbook)

PLS_INTEGER

768; -- 0x0300

CHAIN_OFB (Output Feedback)

PLS_INTEGER

1024; -- 0x0400

Block Cipher Padding Modifiers

PAD_PKCS5 (Complies with PKCS #5)

PLS_INTEGER

4096; -- 0x1000

PAD_NONE (No Dadding)

PLS_INTEGER

8192; -- 0x2000

PAD_ZERO (Pad with Zeros)

PLS_INTEGER

12288; -- 0x3000

Block Ciphers Suites

DES_CBC_PKCS5

PLS_INTEGER

ENCRYPT_DES

+ CHAIN_CBC

+ PAD_PKCS5;

DES3_CBC_PKCS5

PLS_INTEGER

ENCRYPT_3DES

+ CHAIN_CBC

+ PAD_PKCS5;

Dependencies

DBMS_CRYPTO_FFI

DECRYPTBYTES

ENCRYPTBYTES

DECRYPT

ENCRYPT

UTL_RAW

Exceptions

Error Code

Reason

28827

The specified cipher suite is not defined

28829

No value has been specified for the cipher suite to be used

28233

Source data was previously encrypted

28234

DES: Specified key size too short. DES keys must be at least 8 bytes (64 bits).

AES: Specified key size is not supported. AES keys must be 128, 192, or 256 bits

28239

The encryption key has not been specified or contains a NULL value

DECRYPT

Decrypt crypt text data using stream or block cipher with user supplied key and optional iv

Overload 1

dbms_crypto.decrypt(src IN RAW, typ IN PLS_INTEGER, key IN RAW,

iv  IN RAW DEFAULT NULL) RETURN RAW;

See Encrypt Overload 1 demo

Overload 2

dbms_crypto.decrypt(dst IN OUT NOCOPY BLOB, src IN BLOB,

typ IN PLS_INTEGER, key IN RAW, iv  IN RAW DEFAULT NULL);

Overload 3

dbms_crypto.decrypt (dst IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,

src IN BLOB, typ IN PLS_INTEGER, key IN RAW,

iv  IN RAW DEFAULT NULL);

ENCRYPT

Encrypt plain text data using stream or block cipher with user supplied key and optional iv

Overload 1

dbms_crypto.encrypt(src IN RAW, typ IN PLS_INTEGER, key IN RAW,

iv IN RAW DEFAULT NULL) RETURN RAW;

set serveroutput on

DECLARE

l_credit_card_no VARCHAR2(19) := '1234-5678-9012-3456';

l_ccn_raw RAW(128) := utl_raw.cast_to_raw(l_credit_card_no);

l_key     RAW(128) := utl_raw.cast_to_raw('abcdefgh');

l_encrypted_raw RAW(2048);

l_decrypted_raw RAW(2048);

BEGIN

dbms_output.put_line('Original : ' || l_credit_card_no);

l_encrypted_raw := dbms_crypto.encrypt(l_ccn_raw,

dbms_crypto.des_cbc_pkcs5, l_key);

dbms_output.put_line('Encrypted : ' ||

RAWTOHEX(utl_raw.cast_to_raw(l_encrypted_raw)));

l_decrypted_raw := dbms_crypto.decrypt(src => l_encrypted_raw,

typ => dbms_crypto.des_cbc_pkcs5, key => l_key);

dbms_output.put_line('Decrypted : ' ||

utl_raw.cast_to_varchar2(l_decrypted_raw));

END;

/

set serveroutput on

DECLARE

enc_val   RAW(2000);

l_key     RAW(2000);

l_key_len NUMBER := 128/8; -- convert bits to bytes

l_mod     NUMBER := dbms_crypto.ENCRYPT_AES128

+ dbms_crypto.CHAIN_CBC+ dbms_crypto.PAD_PKCS5;

BEGIN

l_key := dbms_crypto.randombytes(l_key_len);

enc_val := dbms_crypto.encrypt(

utl_i18n.string_to_raw('1234-5678-9012-3456', 'AL32UTF8'),

l_mod, l_key);

dbms_output.put_line(enc_val);

END;

/

Overload 2

dbms_crypto.encrypt(dst IN OUT NOCOPY BLOB, src IN BLOB,

typ IN PLS_INTEGER, key IN RAW, iv  IN RAW DEFAULT NULL);

Overload 3

dbms_crypto.encrypt(dst IN OUT NOCOPY BLOB,

src IN CLOB CHARACTER SET ANY_CS, typ IN PLS_INTEGER, key IN RAW, iv  IN RAW DEFAULT NULL);

dbms_crypto.encrypt(UTL_RAW.CAST_TO_RAW(CONVERT('XXX','AL32UTF8')),typ,key);

HASH

Hash source data by cryptographic hash type

Overload 1

dbms_crypto.hash(src IN RAW, typ IN PLS_INTEGER) RETURN RAW;

Overload 2

dbms_crypto.hash(src IN BLOB, typ IN PLS_INTEGER) RETURN RAW;

Overload 3

dbms_crypto.hash(src IN CLOB CHARACTER SET ANY_CS,

typ IN PLS_INTEGER) RETURN RAW;

MAC

Message Authentication Code algorithms provide keyed message protection

Overload 1

dbms_crypto.mac(src IN RAW, typ IN PLS_INTEGER, key IN RAW)

RETURN RAW;

Overload 2

dbms_crypto.mac(src IN BLOB, typ IN PLS_INTEGER, key IN RAW)

RETURN RAW;

Overload 3

dbms_crypto.mac(src IN CLOB CHARACTER SET ANY_CS,

typ IN PLS_INTEGER, key IN RAW) RETURN RAW;

RANDOMBYTES

Returns a raw value containing a pseudo-random sequence of bytes

dbms_crypto.randomnytes(number_bytes PLS_INTEGER) RETURN RAW;

SELECTdbms_crypto.randombytes(1) FROM dual;

SELECT LENGTH(dbms_crypto.randombytes(1)) FROM dual;

SELECT dbms_crypto.randombytes(28) FROM dual;

SELECT LENGTH(dbms_crypto.randombytes(28)) FROM dual;

SELECT dbms_crypto.randombytes(64) FROM dual;

SELECT LENGTH(dbms_crypto.randombytes(64)) FROM dual;

RANDOMINTEGER

Returns a random BINARY_INTEGER

dbms_crypto.randominteger RETURN NUMBER;

SELECTdbms_crypto.randominteger FROM dual;

RANDOMNUMBER

Returns a random Oracle Number

dbms_crypto.randomnumber RETURN NUMBER;

SELECTdbms_crypto.randomnumber FROM dual;

oracle解密des乱码,Oracle中des等算法的加解密相关推荐

  1. android中使用jni对字符串加解密实现分析

    android中使用jni对字符串加解密实现分析 近期项目有个需求.就是要对用户的敏感信息进行加密处理,比方用户的账户password,手机号等私密信息.在java中,就对字符串的加解密我们能够使用A ...

  2. 国密算法:利用python进行sm4算法的加解密,对称密钥

    本篇利用python中的gmssl库进行sm4算法的加解密演示. 国密算法sm4特点: 密钥长度:16bytes(128bits) 分组长度和密钥长度均为128bits: 是对称加密算法:分为ecb模 ...

  3. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  4. 国密算法-SM4加解密工具类

    import cn.hutool.crypto.symmetric.SymmetricCrypto;/*** @author : chenfan* @className : SM4Utils* @da ...

  5. oracle em 界面乱码,oracle em 按钮乱码解决办法及em网页变成英文

    oracle em 按钮乱码解决办法及em网页变成英文以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一 oracle ...

  6. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)(加解密)

    转自http://www.cppblog.com/ArthasLee/archive/2010/12/01/135186.html 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后 ...

  7. java ios rsa解密乱码_java与IOS之间的RSA加解密

    很简单的一个需求,ipad端给密码RSA加密,传到java后台,解密.RSA加密算法是基于一个密钥对的,分为公钥和私钥,一般情况公钥加密,私钥解密,但也可私钥加密,公钥解密.还可以验签,就是先用私钥对 ...

  8. caesar解密_C和C ++中的Caesar密码[加密和解密]

    caesar解密 Get program for caesar cipher in C and C++ for encryption and decryption. 获取用于C和C ++的凯撒密码的程 ...

  9. boot数据加解密 spring_springboot项目使用druid对数据库密码的加解密

    作为一名有经验的开发人员,是不习惯将明文直接放在代码中,总觉得有隐患.今天搭建了一个springboot项目,需要集成数据库,调取数据. 在配置 datasource的时候,想要将密码改为密文,连接数 ...

最新文章

  1. ECLIPSE启动不了,报错org.eclipse.swt.SWTException: Invalid thread access
  2. CSS布局 ——从display,position, float属性谈起
  3. linux的~和/的区别
  4. c++读二进制文件结束的时候总会异常_python专题文件操作
  5. SOA架构下的人事信息管理系统的构建与分析
  6. CommonJS,AMD,CMD区别 - 郑星阳 - ITeye博客
  7. linux日志服务器配置在哪个文件,Linux中日志的基本配置(syslog)
  8. MySQL 学习二:高手必备!MySQL 增删改查高级命令大全硬核总结!
  9. 捷联惯导系统学习7.4(车载惯性/里程仪组合导航 )
  10. 局域网桌面共享会议该如何实现屏幕共享?
  11. Mac OS Catalina 安装Java6
  12. 华为魔术2手机拆机图解_华为手机荣耀Magic2手机维修拆机教程
  13. python openpyxl冻结首行单元格
  14. [bzoj3061][Usaco13Feb]Partitioning the Farm_动态规划_状压dp
  15. HTML模拟唯品会登陆和注册页面
  16. 第四周 放大电路的分析
  17. 几何分布的期望和方差公式推导_平方差公式证明推导过程及运用详解(数学简便计算方法之一)...
  18. 医门凿眼----痹症勾沉
  19. php怎么设置段落之间的距离,html中P标签段落与CSS段落间距距离调整
  20. Linux入门学习(六)—— 怎么更改文件的所有者、所属组?以及怎么更改系统创建的默认权限?

热门文章

  1. 敏捷团队中的QA由来
  2. 【Python】Numpy扩充数组函数之repeat和tile用法
  3. sql over的作用及用法
  4. 华御密盾智能防信息泄密系统
  5. [WIKIOI1298]凸包周长[裸凸包]
  6. Rails字符集问题
  7. 【特征匹配】BRISK原文内容翻译
  8. Tomcat常见问题 (配置)及解决方法
  9. 每日算法练习之最大公约数最小公倍数
  10. sklearn计算两个向量之间的距离