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;
/