DBMS_OBFUSCATION_TOOLKIT

DBMS_OBFUSCATION_TOOLKIT提供的函数和存储过程支持对RAWVARCHAR2类型数据进行加密、解密以及哈希值计算等。

说明

DBMS_OBFUSCATION_TOOLKIT功能完全包含于DBMS_CRYPTO。因此,建议您使用DBMS_CRYPTO

子程序总览

子程序

说明

DESEncrypt Function/Procedure

使用DES算法对数据进行加密

DESDecrypt Function/Procedure

使用DES算法对数据进行解密

DES3Encrypt Function/Procedure

使用3DES算法数据进行加密

DES3Decrypt Function/Procedure

使用3DES算法对数据进行解密

MD5 Function/Procedure

计算数据的MD5哈希值

DESGetKey Function/Procedure

生成DES加密密钥

DES3GetKey Function/Procedure

生成3DES加密密钥

说明

其中DESEncrypt、DESDecrypt、DES3Encrypt、DES3Decrypt、DESGetKey以及DES3GetKey的函数和存储过程仅在集群Oracle语法兼容 2.0(内核小版本2.0.14.17.34.0及以上)版本支持。

DESEncrypt Function

使用DES算法将VARCHAR2RAW类型的数据进行加密。

VARCHAR2

语法

FUNCTION DESEncrypt(input_string     IN  VARCHAR2,
                    key_string       IN  VARCHAR2)
RETURN VARCHAR2;

参数说明

参数

说明

input_string

待加密的VARCHAR2类型数据。

key_string

VARCHAR2类型的加密密钥。

RAW

语法

FUNCTION DESEncrypt(input            IN  RAW,
                    key              IN  RAW)
RETURN RAW;

参数说明

参数

说明

input

待加密的RAW类型数据。

key

RAW类型的加密密钥。

示例

DECLARE
    input_data RAW(100);
    key_data RAW(8);
    encrypted_data RAW(200);
BEGIN
    input_data := UTL_RAW.CAST_TO_RAW('Hello World');
    key_data := UTL_RAW.CAST_TO_RAW('12345678');

    encrypted_data := DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
        input => input_data,
        key => key_data
    );

    DBMS_OUTPUT.PUT_LINE('Encrypted RAW: ' || encrypted_data);
END;

DESEncrypt Procedure

使用DES算法将VARCHAR2RAW类型的数据进行加密。

VARCHAR2

语法

PROCEDURE DESEncrypt(input_string     IN     VARCHAR2,
                     key_string       IN     VARCHAR2,
                     encrypted_string OUT    VARCHAR2);

参数说明

参数

说明

input_string

待加密的VARCHAR2类型数据。

key_string

VARCHAR2类型的加密密钥。

encrypted_string

输出参数,加密后的VARCHAR2类型数据。

RAW

语法

PROCEDURE DESEncrypt(input            IN     RAW,
                     key              IN     RAW,
                     encrypted_data   OUT    RAW);

参数说明

参数

说明

input

待加密的RAW类型数据。

key

RAW类型的加密密钥。

encrypted_data

输出参数,加密后的RAW类型数据。

示例

DECLARE
    input_str VARCHAR2(100) := 'Hello World';
    key_str VARCHAR2(8) := '12345678';
    encrypted_str VARCHAR2(200);
BEGIN
    DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
        input_string => input_str,
        key_string => key_str,
        encrypted_string => encrypted_str
    );

    DBMS_OUTPUT.PUT_LINE('Original: ' || input_str);
    DBMS_OUTPUT.PUT_LINE('Encrypted: ' || encrypted_str);
END;

DESDecrypt Function

使用DES算法将VARCHAR2RAW类型的数据进行解密。

VARCHAR2

语法

FUNCTION DESDecrypt(input_string     IN     VARCHAR2,
                    key_string       IN     VARCHAR2)
RETURN VARCHAR2;

参数说明

参数

说明

input_string

待解密的VARCHAR2类型数据。

key_string

VARCHAR2类型的解密密钥。

RAW

语法

FUNCTION DESDecrypt(input            IN  RAW,
                    key              IN  RAW)
RETURN RAW;

参数说明

参数

说明

input

待解密的RAW类型数据。

key

RAW类型的解密密钥。

示例

DECLARE
    input_str VARCHAR2(100) := 'Hello World';
    key_str VARCHAR2(8) := '12345678';
    encrypted_str VARCHAR2(200);
    decrypted_data VARCHAR2(200);
BEGIN
    encrypted_str := DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
        input_string => input_str,
        key_string => key_str
    );

    decrypted_data := DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
        input_string => encrypted_str,
        key_string => key_str
    );

    DBMS_OUTPUT.PUT_LINE('Original: ' || input_str);
    DBMS_OUTPUT.PUT_LINE('Decrypted: ' || decrypted_data);
END;

DESDecrypt Procedure

使用DES算法将VARCHAR2RAW类型的数据进行解密。

VARCHAR2

语法

PROCEDURE DESDecrypt(input_string     IN    VARCHAR2,
                     key_string       IN    VARCHAR2,
                     decrypted_string OUT   VARCHAR2);

参数说明

参数

说明

input_string

待解密的VARCHAR2类型数据。

key_string

VARCHAR2类型的解密密钥。

decrypted_string

输出参数,解密后的VARCHAR2类型数据。

RAW

语法

PROCEDURE DESDecrypt(input            IN      RAW,
                     key              IN      RAW,
                     decrypted_data   OUT     RAW);

参数说明

参数

说明

input

待解密的RAW类型数据。

key

RAW类型的解密密钥。

decrypted_data

输出参数,解密后的RAW类型数据。

示例

DECLARE
    input_data RAW(100);
    key_data RAW(8);
    encrypted_data RAW(200);
    decrypted_data RAW(200);
BEGIN
    input_data := UTL_RAW.CAST_TO_RAW('Hello World');
    key_data := UTL_RAW.CAST_TO_RAW('12345678');

    DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
        input => input_data,
        key => key_data,
        encrypted_data => encrypted_data
    );

    DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
        input => encrypted_data,
        key => key_data,
        decrypted_data => decrypted_data
    );

    DBMS_OUTPUT.PUT_LINE('Input RAW: ' || input_data);
    DBMS_OUTPUT.PUT_LINE('Decrypted RAW: ' || decrypted_data);
END;

DES3Encrypt Function

使用3DES算法将VARCHAR2RAW类型的数据进行加密。

VARCHAR2

语法

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

参数说明

参数

说明

input_string

待加密的VARCHAR2类型数据。

key_string

VARCHAR2类型的加密密钥。

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

iv_string

初始化向量

RAW

语法

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

参数说明

参数

说明

input

待加密的RAW类型数据。

key

RAW类型的加密密钥。

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

iv

初始化向量

示例

DECLARE
    input_data RAW(100);
    key_data RAW(100);
    encrypted_data RAW(200);
BEGIN
    input_data := UTL_RAW.CAST_TO_RAW('Sensitive Data');
    key_data := UTL_RAW.CAST_TO_RAW('1234567890123456');

    encrypted_data := DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
        input => input_data,
        key => key_data,
        which => DBMS_OBFUSCATION_TOOLKIT.TwoKeyMode
    );

    DBMS_OUTPUT.PUT_LINE('3DES Encrypted RAW: ' || encrypted_data);
END;

DES3Encrypt Procedure

使用3DES算法将VARCHAR2RAW类型的数据进行加密。

VARCHAR2

语法

PROCEDURE 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);

参数说明

参数

说明

input_string

待加密的VARCHAR2类型数据。

key_string

VARCHAR2类型的加密密钥。

encrypted_data

输出参数,加密后的VARCHAR2类型数据。

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

iv_string

初始化向量

示例

DECLARE
    input_str VARCHAR2(100) := 'Sensitive Data';
    key_str VARCHAR2(100) := '1234567890123456';  -- 16字符密钥
    encrypted_str VARCHAR2(200);
BEGIN
    DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
        input_string => input_str,
        key_string => key_str,
        encrypted_string => encrypted_str,
        which => DBMS_OBFUSCATION_TOOLKIT.TwoKeyMode
    );

    DBMS_OUTPUT.PUT_LINE('Original: ' || input_str);
    DBMS_OUTPUT.PUT_LINE('3DES Encrypted: ' || encrypted_str);
END;

RAW

语法

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

参数说明

参数

说明

input

待加密的RAW类型数据。

key

RAW类型的加密密钥。

encrypted_data

输出参数,加密后的RAW类型数据。

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

iv

初始化向量

示例

DECLARE
    input_data RAW(100);
    key_data RAW(100);
    encrypted_data RAW(200);
BEGIN
    input_data := UTL_RAW.CAST_TO_RAW('Sensitive Data');
    key_data := UTL_RAW.CAST_TO_RAW('123456789012345678901234');

    DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
        input => input_data,
        key => key_data,
        encrypted_data => encrypted_data,
        which => DBMS_OBFUSCATION_TOOLKIT.ThreeKeyMode
    );

    DBMS_OUTPUT.PUT_LINE('3DES Encrypted RAW: ' || encrypted_data);
END;

DES3Decrypt Function

使用3DES算法将VARCHAR2RAW类型的数据进行解密。

VARCHAR2

语法

FUNCTION DES3Decrypt(input_string IN VARCHAR2,
                     key_string   IN VARCHAR2,
                     which        IN PLS_INTEGER DEFAULT TwoKeyMode,
                     iv_string    IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;

参数说明

参数

说明

input_string

待解密的VARCHAR2类型数据。

key_string

VARCHAR2类型的解密密钥。

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

iv_string

初始化向量

RAW

语法

FUNCTION DES3Decrypt(input IN RAW,
                     key   IN RAW,
                     which IN PLS_INTEGER DEFAULT TwoKeyMode,
                     iv    IN RAW DEFAULT NULL)
RETURN RAW;

参数说明

参数

说明

input

待解密的RAW类型数据。

key

RAW类型的解密密钥。

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

iv

初始化向量

示例

DECLARE
    input_data RAW(100);
    key_data RAW(100);
    encrypted_data RAW(200);
    decrypted_data RAW(200);
BEGIN
    input_data := UTL_RAW.CAST_TO_RAW('Sensitive Data');
    key_data := UTL_RAW.CAST_TO_RAW('1234567890123456');

    encrypted_data := DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
        input => input_data,
        key => key_data,
        which => DBMS_OBFUSCATION_TOOLKIT.TwoKeyMode
    );

    decrypted_data := DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt(
        input => encrypted_data,
        key => key_data,
        which => DBMS_OBFUSCATION_TOOLKIT.TwoKeyMode
    );

    DBMS_OUTPUT.PUT_LINE('3DES Input RAW: ' || input_data);
    DBMS_OUTPUT.PUT_LINE('3DES Decrypted RAW: ' || decrypted_data);
END;

DES3Decrypt Procedure

使用3DES算法将VARCHAR2RAW类型的数据进行解密。

VARCHAR2

语法

PROCEDURE DES3Decrypt(input_string     IN     VARCHAR2,
                      key_string       IN     VARCHAR2,
                      decrypted_string OUT    VARCHAR2,
                      which            IN     PLS_INTEGER DEFAULT TwoKeyMode,
                      iv_string        IN     VARCHAR2 DEFAULT NULL);

参数说明

参数

说明

input_string

待解密的VARCHAR2类型数据。

key_string

VARCHAR2类型的解密密钥。

decrypted_string

输出参数,解密后的VARCHAR2类型数据。

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

iv_string

初始化向量

RAW

语法

PROCEDURE DES3Decrypt(input          IN     RAW,
                      key            IN     RAW,
                      decrypted_data OUT    RAW,
                      which          IN     PLS_INTEGER DEFAULT TwoKeyMode,
                      iv             IN     RAW DEFAULT NULL);

参数说明

参数

说明

input

待解密的RAW类型数据。

key

RAW类型的解密密钥。

decrypted_data

输出参数,解密后的RAW类型数据。

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

iv

初始化向量

示例

DECLARE
    input_data RAW(100);
    key_data RAW(100);
    encrypted_data RAW(200);
    decrypted_data RAW(200);
BEGIN
    input_data := UTL_RAW.CAST_TO_RAW('Sensitive Data');
    key_data := UTL_RAW.CAST_TO_RAW('1234567890123456');

    DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
        input => input_data,
        key => key_data,
        which => DBMS_OBFUSCATION_TOOLKIT.TwoKeyMode,
        encrypted_data => encrypted_data
    );

    DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt(
        input => encrypted_data,
        key => key_data,
        which => DBMS_OBFUSCATION_TOOLKIT.TwoKeyMode,
        decrypted_data => decrypted_data
    );

    DBMS_OUTPUT.PUT_LINE('3DES Input RAW: ' || input_data);
    DBMS_OUTPUT.PUT_LINE('3DES Decrypted RAW: ' || decrypted_data);
END;

MD5 Function

计算VARCHAR2RAW类型的数据的MD5哈希值。

VARCHAR2

语法

FUNCTION md5(input_string IN VARCHAR2) RETURN VARCHAR2;

参数说明

参数

说明

input

待计算哈希的VARCHAR2类型数据。

示例

DECLARE
    input_str VARCHAR2(100) := 'Hello World';
    hash_result VARCHAR2(100);
BEGIN
    hash_result := DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => input_str);

    DBMS_OUTPUT.PUT_LINE('Input: ' || input_str);
    DBMS_OUTPUT.PUT_LINE('MD5 Hash: ' || hash_result);
END;

RAW

语法

FUNCTION md5(input IN RAW) RETURN RAW;

参数说明

参数

说明

input

待计算哈希的RAW类型数据。

示例

DECLARE
    input_data RAW(100);
    hash_result RAW(100);
BEGIN
    input_data := UTL_RAW.CAST_TO_RAW('Hello World');
    hash_result := DBMS_OBFUSCATION_TOOLKIT.MD5(input => input_data);

    DBMS_OUTPUT.PUT_LINE('Input RAW: ' || input_data);
    DBMS_OUTPUT.PUT_LINE('MD5 Hash RAW: ' || hash_result);
END;

MD5 Procedure

计算VARCHAR2RAW类型的数据的MD5哈希值。

VARCHAR2

语法

PROCEDURE md5(input_string IN VARCHAR2, checksum_string INOUT VARCHAR2);

参数说明

参数

说明

input_string

待计算哈希的VARCHAR2类型数据。

checksum_string

输出参数,VARCHAR2类型,返回的MD5哈希值。

示例

DECLARE
    input_str VARCHAR2(100) := 'Hello World';
    hash_result VARCHAR2(100);
BEGIN
    DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => input_str, checksum_string => hash_result);

    DBMS_OUTPUT.PUT_LINE('Input: ' || input_str);
    DBMS_OUTPUT.PUT_LINE('MD5 Hash: ' || hash_result);
END;

RAW

语法

PROCEDURE md5(input IN RAW, checksum INOUT RAW);

参数说明

参数

说明

input

待计算哈希的RAW类型数据。

checksum

输出参数,RAW类型,返回的MD5哈希值。

示例

DECLARE
    input_data RAW(100);
    hash_result RAW(100);
BEGIN
    input_data := UTL_RAW.CAST_TO_RAW('Hello World');
    DBMS_OBFUSCATION_TOOLKIT.MD5(input => input_data, checksum => hash_result);

    DBMS_OUTPUT.PUT_LINE('Input RAW: ' || input_data);
    DBMS_OUTPUT.PUT_LINE('MD5 Hash RAW: ' || hash_result);
END;

DESGetKey Function

生成用于VARCHAR2RAW格式数据的DES加密密钥。

VARCHAR2

语法

FUNCTION DESGetKey(seed_string IN VARCHAR2) RETURN VARCHAR2;

参数说明

参数

说明

seed

可选的种子值,用于生成密钥。

示例

DECLARE
    des_key VARCHAR2(100);
    custom_seed VARCHAR2(10) := 'myseed123';
BEGIN
    des_key := DBMS_OBFUSCATION_TOOLKIT.DESGetKey(seed_string => custom_seed);
    DBMS_OUTPUT.PUT_LINE('Generated DES Key with seed: ' || des_key);
END;

RAW

语法

FUNCTION DESGetKey(seed IN RAW) RETURN RAW;

参数说明

参数

说明

seed

可选的种子值,用于生成密钥。

示例

DECLARE
    des_key RAW(100);
    custom_seed RAW(10);
BEGIN
    custom_seed := UTL_RAW.CAST_TO_RAW('myseed123');

    des_key := DBMS_OBFUSCATION_TOOLKIT.DESGetKey(seed => custom_seed);
    DBMS_OUTPUT.PUT_LINE('Generated DES Key RAW with seed: ' || des_key);
END;

DESGetKey Procedure

生成用于VARCHAR2RAW格式数据的DES加密密钥。

VARCHAR2

语法

PROCEDURE DESGetKey(seed_string IN     VARCHAR2,
                    key         OUT    VARCHAR2);

参数说明

参数

说明

seed_string

可选的种子值,用于生成密钥。

key

输出参数,生成的密钥。

示例

DECLARE
    des_key VARCHAR2(100);
    custom_seed VARCHAR2(10) := 'myseed123';
BEGIN
    DBMS_OBFUSCATION_TOOLKIT.DESGetKey(seed_string => custom_seed, key => des_key);
    DBMS_OUTPUT.PUT_LINE('Generated DES Key with seed: ' || des_key);
END;

RAW

语法

PROCEDURE DESGetKey(seed  IN     RAW,
                    key   OUT    RAW);

参数说明

参数

说明

seed

可选的种子值,用于生成密钥。

key

输出参数,生成的密钥。

示例

DECLARE
    des_key RAW(100);
    custom_seed RAW(10);
BEGIN
    custom_seed := UTL_RAW.CAST_TO_RAW('myseed123');

    DBMS_OBFUSCATION_TOOLKIT.DESGetKey(seed => custom_seed, key => des_key);
    DBMS_OUTPUT.PUT_LINE('Generated DES Key RAW with seed: ' || des_key);
END;

DES3GetKey Function

生成用于VARCHAR2RAW格式数据的3DES加密密钥。

VARCHAR2

语法

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

参数说明

参数

说明

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

seed_string

可选的种子值,用于生成密钥。

示例

DECLARE
    des3_key VARCHAR2(100);
    custom_seed VARCHAR2(10) := 'myseed123';
BEGIN
    des3_key := DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
        which => DBMS_OBFUSCATION_TOOLKIT.ThreeKeyMode,
        seed => custom_seed
    );
    DBMS_OUTPUT.PUT_LINE('Generated 3DES ThreeKey: ' || des3_key);
END;

RAW

语法

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

参数说明

参数

说明

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

seed

可选的种子值,用于生成密钥。

示例

DECLARE
    des3_key RAW(100);
    custom_seed RAW(10);
BEGIN
    custom_seed := UTL_RAW.CAST_TO_RAW('myseed123');

    des3_key := DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
        which => DBMS_OBFUSCATION_TOOLKIT.ThreeKeyMode,
        seed => custom_seed
    );
    DBMS_OUTPUT.PUT_LINE('Generated 3DES ThreeKey RAW: ' || des3_key);
END;

DES3GetKey Procedure

生成用于VARCHAR2RAW格式数据的3DES加密密钥。

VARCHAR2

语法

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

参数说明

参数

说明

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

seed_string

可选的种子值,用于生成密钥。

key

输出参数,生成的密钥。

示例

DECLARE
    des3_key VARCHAR2(100);
    custom_seed VARCHAR2(10) := 'myseed123';
BEGIN
    DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
        which => DBMS_OBFUSCATION_TOOLKIT.ThreeKeyMode,
        seed => custom_seed,
        key => des3_key
    );
    DBMS_OUTPUT.PUT_LINE('Generated 3DES ThreeKey: ' || des3_key);
END;

RAW

语法

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

参数说明

参数

说明

which

指定3DES模式:

  • (默认)TwoKeyMode。

  • ThreeKeyMode。

seed

可选的种子值,用于生成密钥。

key

输出参数,生成的密钥。

示例

DECLARE
    des3_key RAW(100);
    custom_seed RAW(10);
BEGIN
    custom_seed := UTL_RAW.CAST_TO_RAW('myseed123');

    DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
        which => DBMS_OBFUSCATION_TOOLKIT.ThreeKeyMode,
        seed => custom_seed,
        key => des3_key
    );
    DBMS_OUTPUT.PUT_LINE('Generated 3DES ThreeKey RAW: ' || des3_key);
END;