VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

DBMS_OBFUSCATION_TOOLKIT

功能描述

DBMS_OBFUSCATION_TOOLKIT提供用于加密和解密存储的数据的接口,可以对数据进行DES、Triple DES或者MD5加密。该内置包支持的内容请参考子程序

注意事项

  • 使用DBMS_OBFUSCATION_TOOLKIT内置包前,需要先加载[pgcrypto插件]()。

    CREATE EXTENSION pgcrypto;
    
  • 该功能仅在数据库兼容模式为Oracle时能够使用(即创建DB时DBCOMPATIBILITY='A'),在其他数据库兼容模式下不能使用该特性。

子程序

函数 描述
DESENCRYPT 用于使用DES算法对输入数据进行加密,并生成加密格式的数据。
DESDECRYPT 用于对使用DES算法所生成的加密数据进行解密。
DESGETKEY 生成一个随机字符串,并对其使用DES算法生成一个加密密钥。
DES3ENCRYPT 用于使用DES3算法对输入数据进行加密,并生成加密格式的数据。
DES3DECRYPT 用于对使用DES3算法所生成的加密数据进行解密。
DES3GETKEY 生成一个随机字符串,并对其使用DES3算法生成一个加密密钥。
MD5 用于使用md5算法生成密码校验码。

DESENCRYPT

语法格式

DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
   input            IN    RAW,
   key              IN    RAW,
   encrypted_data   OUT   RAW);

DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
   input_string     IN    VARCHAR2,
   key_string       IN    VARCHAR2,
   encrypted_string OUT   VARCHAR2);

DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
   input         IN  RAW,
   key           IN  RAW)
  RETURN RAW;

DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
   input_string  IN  VARCHAR2,
   key_string    IN  VARCHAR2)
  RETURN VARCHAR2;

参数说明

  • input:要加密的数据。
  • key:加密密钥。
  • encrypted_data:加密数据。
  • input_string:要加密的字符串。
  • key_string:加密密钥字符串。
  • encrypted_string:加密字符串。

示例

  • 对raw类型进行加密。

    select dbms_obfuscation_toolkit.desencrypt('ABCDEFEF'::raw,'12345678'::raw);
    

    返回结果为:

        desencrypt        
    --------------------------
    5837505A4D3578332F44383D
    (1 row)
    
  • 对text类型进行加密。

    select dbms_obfuscation_toolkit.desencrypt('ABCDEFGH'::text,'12345678'::text);
    

    返回结果为:

        desencrypt        
    --------------------------
    lt5gPq7WJW/hywLARpfLNA==
    (1 row)
    
  • 对中文进行加密。

    select dbms_obfuscation_toolkit.desencrypt('中文中文中文中文'::text,'测试'::text);
    

    返回结果为:

                desencrypt                  
    ----------------------------------------------
    uJ0LFYdRFGzJdmhYnaG9XXKrM4wcJMz6ncu4SV204yM=
    (1 row)
    

DESDECRYPT

语法格式

DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
   input             IN   RAW,
   key               IN   RAW,
   decrypted_data    OUT  RAW);

DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
   input_string      IN   VARCHAR2,
   key_string        IN   VARCHAR2,
   decrypted_string  OUT  VARCHAR2);

DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
   input            IN  RAW,
   key              IN  RAW)
  RETURN RAW;

DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
   input_string     IN  VARCHAR2,
   key_string       IN  VARCHAR2)
  RETURN VARCHAR2;

参数说明

  • input:要加密的数据。
  • key:加密密钥。
  • decrypted_data:加密数据。
  • input_string:要加密的字符串。
  • key_string:加密密钥字符串。
  • decrypted_string:加密字符串。

示例

  • 对raw类型进行解密。

    select dbms_obfuscation_toolkit.desdecrypt(dbms_obfuscation_toolkit.desencrypt('ABCDEFEF'::raw,'12345678'::raw),'12345678'::raw);
    

    返回结果为:

    desdecrypt 
    ------------
    ABCDEFEF
    (1 row)
    
  • 对text类型进行解密。

    select dbms_obfuscation_toolkit.desdecrypt(dbms_obfuscation_toolkit.desencrypt('ABCDEFGH'::text,'12345678'::text) ,'12345678'::text);
    

    返回结果为:

    desdecrypt 
    ------------
    ABCDEFGH
    (1 row)
    

DESGETKEY

语法格式

DBMS_OBFUSCATION_TOOLKIT.DESGetKey(
   seed         IN   RAW,
   key          OUT  RAW);

DBMS_OBFUSCATION_TOOLKIT.DESGetKey(
   seed_string  IN   VARCHAR2,
   key          OUT  VARCHAR2);

DBMS_OBFUSCATION_TOOLKIT.DESGetKey(
   seed IN RAW)
 RETURN RAW;

DBMS_OBFUSCATION_TOOLKIT.DESGetKey(
   seed_string IN VARCHAR2)
 RETURN VARCHAR2;

参数说明

  • seed:长度至少未80个字符的值。
  • key:加密密钥。
  • key_string:加密密钥字符串。

示例

  • 用des算法随机生成加密密钥。

    select dbms_obfuscation_toolkit.desgetkey('sucesss');
    

    返回结果为:

    desgetkey 
    -----------
    yxvntnex
    (1 row)
    
  • 用des算法随机生成text类型的加密密钥。

    select dbms_obfuscation_toolkit.desgetkey('sucesss'::text);
    

    返回结果为:

    desgetkey 
    -----------
    zmuewwki
    (1 row)
    
  • 用des算法随机生成raw类型的加密密钥。

    select dbms_obfuscation_toolkit.desgetkey('ABCDEFEF'::raw);
    

    返回结果为:

    desgetkey     
    ------------------
    6F746E7073696F71
    (1 row)
    

DES3ENCRYPT

语法格式

DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
   input           IN     RAW,
   key             IN     RAW,
   encrypted_data  OUT    RAW,
   which           IN     PLS_INTEGER  DEFAULT TwoKeyMode
   iv              IN     RAW          DEFAULT NULL);

DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
   input_string      IN     VARCHAR2,
   key_string        IN     VARCHAR2,
   encrypted_string  OUT    VARCHAR2,
   which             IN     PLS_INTEGER  DEFAULT TwoKeyMode
   iv_string         IN     VARCHAR2     DEFAULT NULL);

DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
   input        IN RAW,
   key          IN RAW,
   which        IN PLS_INTEGER DEFAULT TwoKeyMode
   iv           IN RAW         DEFAULT NULL)
  RETURN RAW;

DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
   input_string  IN VARCHAR2,
   key_string    IN VARCHAR2,
   which         IN PLS_INTEGER DEFAULT TwoKeyMode
   iv_string     IN VARCHAR2    DEFAULT NULL)
  RETURN VARCHAR2;

参数说明

  • input:要加密的数据。
  • key:加密密钥。
  • encrypted_data:加密数据。
  • which:
    • 取值为0:使用TwoKeyMode。默认值。
    • 取值为1:使用ThreeKeyMode。
  • iv:初始化向量。
  • input_string:要加密的字符串。
  • key_string:加密密钥字符串。
  • encrypted_string:加密字符串。
  • iv_string:初始化向量。

示例

  • 对text类型数据加密,密钥长度大于等于16。

    select dbms_obfuscation_toolkit.des3encrypt('ABCDEFEF'::text,'ABCABCABCABCABCA'::text);
    

    返回结果为:

        des3encrypt
    --------------------------
    K9pRtTB3V7mVThiNt+zYmg==
    (1 row)
    

DES3GETKEY

语法格式

DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
   which        IN   PLS_INTEGER DEFAULT TwoKeyMode,
   seed         IN   RAW,
   key          OUT  RAW);

DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
   which        IN   PLS_INTEGER DEFAULT TwoKeyMode,
   seed_string  IN   VARCHAR2,
   key          OUT  VARCHAR2);

DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
   which  IN  PLS_INTEGER DEFAULT TwoKeyMode,
   seed   IN  RAW)
 RETURN RAW;

DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
   which        IN  PLS_INTEGER DEFAULT TwoKeyMode,
   seed_string  IN  VARCHAR2)
 RETURN VARCHAR2;

参数说明

  • which:
    • 取值为0:使用TwoKeyMode。默认值。
    • 取值为1:使用ThreeKeyMode。
  • seed:长度至少为80个字符的值。
  • key:加密密钥。
  • seed_string:长度至少为80个字符的字符串。

示例

  • 对text类型数据加密,加密数据字符长度大于等于80个。

    select dbms_obfuscation_toolkit.des3getkey(0,'ABCDEFEFABCDEFEFABCDEFEFABCDEFEFABCDEFEFABCDEFEFABCDEFEFABCDEFEFABCDEFEFABCDEFFF'::text);
    

    返回结果为:

        des3getkey
    ------------------
    soQKaLCAvdTZXPxJ
    (1 row)
    
  • 对raw类型数据加密,加密数据字符长度小于80个。

    select dbms_obfuscation_toolkit.des3getkey('ABCDEFEF'::raw);
    

    返回结果为:

                des3getkey
    ----------------------------------
    69736F6E6662706D7661716768796374
    (1 row)
    

MD5

语法格式

DBMS_OBFUSCATION_TOOLKIT.MD5(
   input            IN   RAW,
   checksum         OUT  raw_checksum);

DBMS_OBFUSCATION_TOOLKIT.MD5(
   input_string     IN   VARCHAR2,
   checksum_string  OUT  varchar2_checksum);

DBMS_OBFUSCATION_TOOLKIT.MD5(
   input         IN  RAW)
  RETURN raw_checksum;

DBMS_OBFUSCATION_TOOLKIT.MD5(
   input_string  IN  VARCHAR2)
  RETURN varchar2_checksum;

参数说明

  • input:要生成校验码的数据。
  • checksum:128位加密信息摘要。
  • input_string:要生成校验码的字符串。
  • checksum_string:128位加密信息摘要。

示例

  • 用md5算法随机生成raw类型密码校验码。

    select dbms_obfuscation_toolkit.MD5('ABCDEFEF'::raw);
    

    返回结果为:

                md5                
    ----------------------------------
    42BE4B48002C72898ADEDCBA9C6370F6
    (1 row)
    
  • 用md5算法随机生成text类型密码校验码。

    select dbms_obfuscation_toolkit.MD5('ABCDEFEF'::text);
    

    返回结果为:

        md5
    ---------------
    \x18Mr_\x10s"
    (1 row)