DBMS_OBFUSCATION_TOOLKIT 包

为了保护敏感数据,DM提供一个数据加密包dbms_obfuscation_toolkit。利用这个包,用户可以对数据进行DES、DES3加密,或者对数据进行MD5散列。

11.1 相关方法

dbms_obfuscation_toolkit包中包含的过程和函数如下详细介绍:

  1. DES3DECRYPT

对varbinary数据进行DES3解密。

语法如下:

PROCEDURE DES3DECRYPT(

   input IN VARBINARY,

   key IN VARBINARY,

   decrypted_data OUT VARBINARY,

   which IN INT DEFAULT 0,

   iv IN VARBINARY DEFAULT NULL

);

返回值

解密后的varbinary数据。

对VARCHAR2数据进行DES3解密。

语法如下:

PROCEDURE DES3DECRYPT(

   input_string IN VARCHAR2,

   key_string IN VARCHAR2,

   decrypted_string OUT VARCHAR2,

   which IN INT DEFAULT 0,

   iv_string IN VARCHAR2 DEFAULT NULL

);

返回值

解密后的VARCHAR2类型数据。

对varbinary数据进行DES3解密。

语法如下:

FUNCTION DES3DECRYPT(

  input IN VARBINARY,

  key IN VARBINARY,

  which IN INT DEFAULT 0,

  iv IN VARBINARY DEFAULT NULL

)RETURN VARBINARY;

返回值

解密后的varbinary数据。

对VARCHAR2数据进行DES3解密。

语法如下:

FUNCTION DES3DECRYPT(

   input_string IN VARCHAR2,

   key_string IN VARCHAR2,

   which IN INT DEFAULT 0,

   iv_string IN VARCHAR2 DEFAULT NULL

)RETURN VARCHAR2;

返回值

解密后的VARCHAR2数据。

参数详解

  • INPUT_STRING输入参数,需要解密的数据。
  • KEY_STRING输入参数,解密数据使用的密钥。
  • WHICH输入参数,解密模式,可选值0、1。0表示双密钥DES3解密,1表示三密钥DES3解密。
  • IV_STRING输入参数,解密数据使用的初始化向量。
  1. DES3ENCRYPT

对varbinary数据进行DES3加密。

语法如下:

PROCEDURE DES3Encrypt(

   input IN VARBINARY,

   key IN VARBINARY,

   encrypted_data OUT VARBINARY,

   which IN INT DEFAULT 0,

   iv IN VARBINARY DEFAULT NULL

);

参数详解

  • INPUT输入参数,需要加密的数据。
  • KEY输入参数,加密数据使用的密钥。
  • eNcrypted_data输出参数,被加密后的数据。
  • WHICH

输入参数,加密模式,可选值0、1。0表示双密钥DES3加密,1表示三密钥DES3加密。

  • IV输入参数,加密数据使用的初始化向量。

对VARCHAR2数据进行DES3加密。

语法如下:

PROCEDURE DES3Encrypt(

   input_string IN VARCHAR2,

   key_string IN VARCHAR2,

   encrypted_string OUT VARCHAR2,

   which IN INT DEFAULT 0,

   iv_string IN VARCHAR2 DEFAULT NULL

);

参数详解

  • input_string输入参数,需要加密的数据。
  • key_string输入参数,加密数据使用的密钥。
  • encrypted_string输出参数,被加密后的数据。
  • WHICH

输入参数,加密模式,可选值0、1。0表示双密钥DES3加密,1表示三密钥DES3加密。

  • iv_string输入参数,加密数据使用的初始化向量。

对varbinary数据进行DES3加密。

语法如下:

FUNCTION DES3Encrypt(

   input IN VARBINARY,

   key IN VARBINARY,

   which IN INT DEFAULT 0,

   iv IN VARBINARY DEFAULT NULL

)RETURN VARBINARY;

参数详解

  • INPUT输入参数,需要加密的数据。
  • KEY输入参数,加密数据使用的密钥。
  • WHICH

输入参数,加密模式,可选值0、1。0表示双密钥DES3加密,1表示三密钥DES3加密。

  • IV输入参数,加密数据使用的初始化向量。

返回值

返回值加密后的VARBINARY数据。

对VARCHAR2数据进行DES3加密。

语法如下:

FUNCTION DES3Encrypt(

   input_string IN VARCHAR2,

   key_string IN VARCHAR2,

   which IN INT DEFAULT 0,

   iv_string IN VARCHAR2 DEFAULT NULL

)RETURN VARCHAR2;

参数详解

  • input_string输入参数,需要加密的数据。
  • key_string输入参数,加密数据使用的密钥。
  • WHICH

输入参数,加密模式,可选值0、1。0表示双密钥DES3加密,1表示三密钥DES3加密。

  • iv_string输入参数,加密数据使用的初始化向量。

返回值

返回值加密后的VARCHAR2数据。

  1. DES3GETKEY

生成VARBINARY类型数据的DES3加密密钥。

语法如下:

PROCEDURE DES3GetKey(

   which IN INT DEFAULT 0,

   seed IN VARBINARY,

   key OUT VARBINARY

);

参数详解

  • WHICH

输入参数,DES3工作模式,可选值0、1。0表示双密钥DES3,1表示三密钥DES3。

  • seed输入参数,获取DES3密钥使用的种子。
  • KEY输出参数,VARBINARY类型的DES3加密密钥。

生成VARchar2类型的DES3加密密钥。

语法如下:

PROCEDURE DES3GetKey(

   which IN INT DEFAULT 0,

   seed_string IN VARCHAR2,

   key OUT VARCHAR2

);

参数详解

  • WHICH

输入参数,DES3工作模式,可选值0、1。0表示双密钥DES3,1表示三密钥DES3。

  • seed_string输入参数,获取DES3密钥使用的种子。
  • KEY输出参数,VARchar2类型的DES3加密密钥。

生成VARBINARY类型的DES3加密密钥。

语法如下:

FUNCTION DES3GetKey(

   which IN INT DEFAULT 0,

   seed IN VARBINARY

)RETURN VARBINARY;

参数详解

  • WHICH

输入参数,DES3工作模式,可选值0、1。0表示双密钥DES3,1表示三密钥DES3。

  • seed输入参数,获取DES3密钥使用的种子。

返回值

返回值VARBINARY类型的DES3加密密钥。

生成VARchar2类型的DES3加密密钥。

语法如下:

FUNCTION DES3GetKey(

   which IN INT DEFAULT 0,

   seed_string IN VARCHAR2

)RETURN VARCHAR2;

参数详解

  • WHICH

输入参数,DES3工作模式,可选值0、1。0表示双密钥DES3,1表示三密钥DES3。

  • seed_string输入参数,获取DES3密钥使用的种子。

返回值

返回值VARchar2类型的DES3加密密钥。

  1. DESDECRYPT

对varbinary数据进行DES解密。

语法如下:

PROCEDURE DESDECRYPT(

   input IN VARBINARY,

   key IN VARBINARY,

   decrypted_data OUT VARBINARY

);

参数详解

  • INPUT输入参数,需要解密的数据。
  • KEY输入参数,解密数据使用的密钥。
  • decrypted_data输出参数,被解密后的数据。

对VARCHAR2数据进行DES解密。

语法如下:

PROCEDURE DESDECRYPT(

   input_string IN VARCHAR2,

   key_string IN VARCHAR2,

   decrypted_string OUT VARCHAR2

);

参数详解

  • input_string输入参数,需要解密的数据。
  • key_string输入参数,解密数据使用的密钥。
  • decrypted_string输出参数,被解密后的数据。

对varbinary数据进行DES解密。

语法如下:

FUNCTION DESDECRYPT(

input IN VARBINARY,

key IN VARBINARY)

RETURN VARBINARY;

参数详解

  • INPUT输入参数,需要解密的数据。
  • KEY输入参数,解密数据使用的密钥。

返回值

返回值解密后的varbinary数据。

对VARCHAR2数据进行DES解密。

语法如下:

FUNCTION DESDECRYPT(

  input_string IN VARCHAR2,

  key_string IN VARCHAR2

)RETURN VARCHAR2;

参数详解

  • INPUT_string输入参数,需要解密的数据。
  • KEY_string输入参数,解密数据使用的密钥。

返回值

返回值解密后的VARCHAR2数据。

  1. DESENCRYPT

对varbinary数据进行DES加密。

语法如下:

PROCEDURE DESEncrypt(

   input IN VARBINARY,

   key IN VARBINARY,

   encrypted_data OUT VARBINARY

);

参数详解

  • INPUT输入参数,需要加密的数据。
  • KEY输入参数,加密数据使用的密钥。
  • eNcrypted_data输出参数,被加密后的数据。

对VARCHAR2数据进行DES加密。

语法如下:

PROCEDURE DESEncrypt(

   input_string IN VARCHAR2,

   key_string IN VARCHAR2,

   encrypted_string OUT VARCHAR2

);

参数详解

  • input_string输入参数,需要加密的数据。
  • key_string输入参数,加密数据使用的密钥。
  • encrypted_string输出参数,被加密后的数据。

对varbinary数据进行DES加密。

语法如下:

FUNCTION DESEncrypt(

   input IN VARBINARY,

   key IN VARBINARY

)RETURN VARBINARY;

参数详解

  • INPUT输入参数,需要加密的数据。
  • KEY输入参数,加密数据使用的密钥。
  • 返回值加密后的VARBINARY数据。

对VARCHAR2数据进行DES加密。

语法如下:

FUNCTION DESEncrypt(

   input_string IN VARCHAR2,

   key_string IN VARCHAR2

)RETURN VARCHAR2;

参数详解

  • input_string输入参数,需要加密的数据。
  • key_string输入参数,加密数据使用的密钥。

返回值

返回值加密后的VARCHAR2数据。

  1. DESGETKEY

生成VARBINARY类型的DES加密密钥。

语法如下:

PROCEDURE DESGetKey(

   seed IN VARBINARY,

   key OUT VARBINARY

);

参数详解

  • seed输入参数,获取DES密钥使用的种子。
  • KEY输出参数,VARBINARY类型的DES加密密钥。

生成VARchar2类型的DES加密密钥。

语法如下:

PROCEDURE DESGetKey(

  seed_string IN VARCHAR2,

  key OUT VARCHAR2

);

参数详解

  • seed_string输入参数,获取DES密钥使用的种子。
  • KEY输出参数,VARchar2类型的DES加密密钥。

生成VARBINARY类型的DES加密密钥。

语法如下:

FUNCTION DESGetKey(

   seed IN VARBINARY

)RETURN VARBINARY;

参数详解

  • seed输入参数,获取DES密钥使用的种子。

返回值

返回VARBINARY类型的DES加密密钥。

生成VARchar2类型的DES加密密钥。

语法如下:

FUNCTION DESGetKey(

   seed_string IN VARCHAR2

)RETURN VARCHAR2;

参数详解

  • seed_string输入参数,获取DES密钥使用的种子。
  • 返回值VARchar2类型的DES加密密钥。
  1. MD5

生成VARBINARY类型数据的mD5散列值。同一台机器配置,每次运行的结果一致。

语法如下:

PROCEDURE MD5(

  INPUT IN VARBINARY,

  CHECKSUM OUT VARBINARY

);

参数详解

  • input输入参数,需要进行散列的数据。
  • checksum输出参数,经MD5散列后的数据。

生成VARCHAR2类型数据的mD5散列值。同一台机器配置,每次运行的结果一致。

语法如下:

PROCEDURE MD5(

	input_string IN VARCHAR2,

	checksum_string OUT VARCHAR2

);

参数详解

  • input_STRING输入参数,需要进行散列的数据。
  • checksum_STRING输出参数,经MD5散列后的数据。

生成VARBINARY类型数据的mD5散列值。同一台机器配置,每次运行的结果一致。

语法如下:

FUNCTION MD5(

	INPUT IN VARBINARY

)RETURN VARBINARY;

参数详解

  • input输入参数,需要进行散列的数据。

返回值

返回MD5散列后的varbinary数据。

生成VARCHAR2类型数据的mD5散列值。同一台机器配置,每次运行的结果一致。

语法如下:

FUNCTION MD5(

	input_string IN VARCHAR2

)RETURN VARCHAR2;

参数详解

  • input_STRING输入参数,需要进行散列的数据。

返回值

返回MD5散列后的varchar2数据。

11.2 使用说明

  1. 被加解密的数据不能为空。
  2. DM的DES3加解密目前只支持双密钥,即WHICH默认为0的情况。
  3. iv加解密数据使用的初始化向量目前不使用,默认为NULL,此时采用系统默认的初始化向量。
  4. des3getkey和desgetkey生成加密密钥的种子seed目前不使用,因为DM用于生成密钥的环境已经配置好,只需要根据密钥的大小生成指定长度的密钥即可。
  5. DES和DES3加解密的块大小为8BYTES,因此用于加解密的数据必须是8的整数倍。
  6. DES加解密使用的密钥长度为8,多余8后的字符被忽略。
  7. 双密钥DES3加解密使用的密钥长度为16,多余16后的字符被忽略。
  8. 三密钥DES3加解密使用的密钥长度为24,多余24后的字符被忽略。
  9. 十六进制在DM对应的是VARBINARy数据类型,在oracle中对应的是RAW类型。
  10. MD5主要用途是对数据进行散列,用于校验。不同的机器生成的散列值不同。

11.3 举例说明

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。

SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_OBFUSCATION_TOOLKIT');

SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_OUTPUT');

SET SERVEROUTPUT ON; --dbms_output.put_line需要设置这条语句,才能打印出消息

例1 分别使用DES3ENCRYPT加密算法、des3decrypt解密算法对VARBINARY类型数据进行加密解密。

DECLARE

raw_input VARBINARY(128) := '74696765727469676572746967657274';
--'tigertigertigert'

raw_key VARBINARY(128) := '73636F747473636F747473636F747473';
--'scottscottscotts'

encrypted_raw VARBINARY(2048);

decrypted_raw VARBINARY(2048);

BEGIN

dbms_output.put_line('> ========= BEGIN TEST RAW DATA =========');

dbms_output.put_line('> Raw input : ' ||

	raw_input);

  dbms_obfuscation_toolkit.DES3Encrypt(raw_input,

           raw_key, encrypted_raw );

  dbms_output.put_line('> encrypted hex value : ' ||

          encrypted_raw);

  dbms_obfuscation_toolkit.DES3Decrypt(encrypted_raw,

         raw_key, decrypted_raw);

  dbms_output.put_line('> Decrypted raw output : ' ||

         decrypted_raw);

  dbms_output.put_line('> ');

  if raw_input =

         decrypted_raw THEN

     dbms_output.put_line('> Raw DES Encyption and Decryption successful');

  END if;

END;

/

结果:

>========= BEGIN TEST RAW DATA =========

> Raw input : 74696765727469676572746967657274

> encrypted hex value : F77BB98AF8E7F59E329C31027CAF6C98

> Decrypted raw output : 74696765727469676572746967657274

>

> Raw DES Encyption and Decryption successful

例2 分别使用DESENCRYPT加密算法、desdecrypt解密算法对VARCHAR2类型的数据进行加密、解密。本示例建库时,未指定unicode参数(unicode=0)。

DECLARE

input_string VARCHAR2(8) := 'DM123456';

key_string VARCHAR2(8) := 'PASSWORD';

encrypted_string VARCHAR2(2048);

decrypted_string VARCHAR2(2048);

BEGIN

	dbms_obfuscation_toolkit.DESEncrypt(

		input_string, key_string, encrypted_string );

	dbms_output.put_line('> Encrypted string : ' ||

		encrypted_string);

	dbms_obfuscation_toolkit.DESDecrypt(

		encrypted_string,

		key_string,

		decrypted_string);

	dbms_output.put_line('> Decrypted output : ' ||

		decrypted_string);

	dbms_output.put_line('> ');

	if input_string =

		decrypted_string THEN

	dbms_output.put_line('> DES Encryption and Decryption successful');

	END IF;

END;

/

结果:

> Encrypted string : 盿0娒苳

> Decrypted output : DM123456

>

> DES Encryption and Decryption successful

例3 使用MD5算法对varbinary类型数据散列,查看其散列值。

DECLARE

	retval varbinary(100);

	input_string varbinary(100) := '74696765727469676572746967657274';

	BEGIN

	dbms_output.put_line('> ========= BEGIN TEST VARBINARY DATA =========');

	dbms_output.put_line('> input string : '

		|| input_string);

	retval := DBMS_OBFUSCATION_TOOLKIT.MD5(input_string);

	dbms_output.put_line( '> MD5 string output : ' ||

		retval);

	END;

/

结果:

> ========= BEGIN TEST VARBINARY DATA =========

> input string : 74696765727469676572746967657274

> MD5 string output : 831F2AA79221A0F8F330E43A76B53323

例4 使用DES3GETKEY,生成VARCHAR2类型的DES3加密密钥,输出加密密钥。

DECLARE

	retval varchar2(100);

	input_string varchar2(100) :=
'012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789';

	BEGIN

		dbms_output.put_line('> ========= BEGIN TEST STRING DATA =========');

	dbms_output.put_line('> input string : '

		|| input_string);

		DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(SEED_STRING => INPUT_STRING, KEY =>
RETVAL);

		dbms_output.put_line('> decrypted string output : ' ||

		retval);

END;

/

结果:

> ========= BEGIN TEST STRING DATA =========

> input string : 0123456789012345678901234567890123456789012

> 34567890123456789012345678901234567890123456789

> decrypted string output : 4OXdw4FkLe8386jQ --每次生成密码均不一样
微信扫码
分享文档
扫一扫
联系客服