3DES

实现了3DES加密算法和解密算法,以及存储过程。

注解

在3DES加密中加密的数据至少有有8个字节,而且要为8的倍数

在神通数据库中密钥至少为16个字节,同时超过16字节的话将会被截断。也就是说密钥长度有效值固定为16字节

函数

DES3Encrypt函数声明

FUNCTION  DES3Encrypt(input             IN      VARBINARY,
                      key               IN      VARBINARY,
                      which             IN      PLS_INTEGER     DEFAULT 0,
                      iv                IN      VARBINARY       DEFAULT NULL)
    RETURN VARBINARY;

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

返回值

3DES加密方式加密后的串。

结构

参数 说明
input 要加密的二进制串
key 二进制串密钥
input_string 要加密的字符串
key_string 字符串密钥
which 是否开启triple-DES加密方式 ,默认为0,即不开启
iv/iv_string 初始化向量,默认为NULL

DES3Decrypt函数声明

FUNCTION  DES3DECRYPT(input             IN      VARBINARY,
                      key               IN      VARBINARY,
                      which             IN      PLS_INTEGER     DEFAULT 0,
                      iv                IN      VARBINARY       DEFAULT NULL)
        RETURN VARBINARY;

FUNCTION  DES3DECRYPT(input_string      IN      VARCHAR2,
                      key_string        IN      VARCHAR2,
                      which             IN      PLS_INTEGER     DEFAULT 0,
                      iv_string         IN      VARCHAR2        DEFAULT NULL)
        RETURN VARCHAR2;

返回值

解密后的串。

结构

参数 说明
input 要解密的二进制串
key 二进制串密钥
input_string 要解密的字符串
key_string 字符串密钥
which 是否开启triple-DES加密方式 ,默认为0,即不开启
iv/iv_string 初始化向量,默认为NULL

注解

注意当which不为1时,那么密钥长度为16字节,如果为1的话密钥长度为24字节,即triple DES加密

如果iv不为NULL的话,相同的初始要加密的串,和相同的密钥,也会产生不同的加密串。

DES3GetKey函数声明

FUNCTION  DES3GetKey (which             IN      PLS_INTEGER     DEFAULT 0,
                      seed              IN      VARBINARY)
        RETURN VARBINARY;

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

结构

参数 说明
seed 产生密钥的二进制种子
seed_string 产生密钥的字符串种子
which 是否开启triple-DES加密方式,默认为0,即不开启

返回值

适用于3des的密钥

示例

--函数示例

 --对原始串进行加密,未开启triple-DES加密方式。
 select dbms_obfuscation_toolkit.DES3Encrypt('scott123','lol1234566666666'); 
DES3ENCRYPT(varchar)      |
--------------------------
689ED8F356C30E79          |
总数目:1

 --对原始串进行加密,开启triple-DES加密方式。which=1
 select dbms_obfuscation_toolkit.DES3Encrypt('scott123','lol123456666666677777777',1); 
DES3ENCRYPT(varchar)      |
--------------------------
1E3CA368FA1D1B06          |
总数目:1

 --对原始串进行加密,未开启triple-DES加密方式。给予初始化向量
 select dbms_obfuscation_toolkit.DES3Encrypt('scott123','lol1234566666666',0,1); 
DES3ENCRYPT(varchar)      |
--------------------------
F726E5FBDF5BFBB3          |
总数目:1


 --对加密串进行解密, 
 select dbms_obfuscation_toolkit.DES3Decrypt('689ED8F356C30E79','lol1234566666666');
DES3DECRYPT(varchar)      |
--------------------------
scott123                  |
总数目:1

存储过程

DES3Encrypt存储过程

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

PROCEDURE DES3Encrypt(input_string      IN      VARCHAR2,
                      key_string        IN      VARCHAR2,
                      encrypted_string  OUT     VARCHAR2,
                      which             IN      PLS_INTEGER     DEFAULT 0,
                      iv_string         IN      VARCHAR2        DEFAULT NULL);

结构

参数 说明
input 要加密的二进制串
key 二进制串密钥
input_string 要加密的字符串
key_string 字符串密钥
which 是否开启triple-DES加密方式 ,默认为0,即不开启
iv/iv_string 初始化向量,默认为NULL
encrypted_data 二进制的加密后的串
encrypted_string 加密后的字符串

DES3Decrypt存储过程

PROCEDURE DES3DECRYPT(input             IN      VARBINARY,
                      key               IN      VARBINARY,
                      decrypted_data    OUT     VARBINARY,
                      which             IN      PLS_INTEGER     DEFAULT 0,
                      iv                IN      VARBINARY       DEFAULT NULL);

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

结构

参数 说明
input 要解密的二进制串
key 二进制串密钥
input_string 要解密的字符串
key_string 字符串密钥
which 是否开启triple-DES加密方式 ,默认为0,即不开启
iv/iv_string 初始化向量,默认为NULL
decrypted_data 二进制的解密后的串
decrypted_string 解密后的字符串

DES3GetKey存储过程

PROCEDURE DES3GetKey (which             IN      PLS_INTEGER     DEFAULT 0,
                      seed              IN      VARBINARY,
                      key               OUT     VARBINARY);

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

结构

参数 说明
which 是否开启triple-DES加密方式,默认为0,即不开启
seed 产生密钥的二进制种子
seed_string 产生密钥的字符串种子
key 产生的用于3DES的密钥

示例

--存储过程示例

 declare
--加密后的串
 encrypted_string varchar(100);
--解密后的串
 decrypted_string varchar(100);
 begin
 dbms_obfuscation_toolkit.DES3Encrypt('scott123','123456789abefghi',encrypted_string);
 dbms_output.put_line(encrypted_string);
 dbms_obfuscation_toolkit.DES3Decrypt(encrypted_string,'123456789abefghi',decrypted_string);
 dbms_output.put_line(decrypted_string);
 if decrypted_string='scott123' then
 dbms_output.put_line('successful');

 end if;
 end;
 /