Skip to content

系统包DBMS_CRYPTO加密

对于表中新增数据加密,首先基于原系统包中包体定义创建自定义加密函数,然后将密文转换为十六进制数字返回。

示例

  • 示例1

    sql
    --利用内置加密系统包创建自定义加密函数:
    SQL> CREATE OR REPLACE FUNCTION encrypt_aes (p_text VARCHAR,v_text VARCHAR) RETURN VARCHAR IS
        typ INTEGER := DBMS_CRYPTO.ENCRYPT_AES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
        v_enc VARCHAR;
        decrypted_raw RAW;
        BEGIN
        decrypted_raw:=DBMS_CRYPTO.ENCRYPT(p_text,typ,v_text);
        v_enc := RAWTOHEX(decrypted_raw);
        RETURN v_enc;
        END;
    
    --示例:
    SQL> SELECT encrypt_aes('加密内容','123456') FROM DUAL;
    
    EXPR1 |
    ------------------------------------------------------------------------------
    B87F341CD02BD2E4460B61E36F0FB4CF|

    上述示例,创建加密函数后,将“加密内容”加密为“B87F341CD02BD2E4460B61E36F0FB4CF”。
    常用加密套件:

    • ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5
    • ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5
    • ENCRYPT_AES + CHAIN_CBC + PAD_PKCS5
  • 示例2

    sql
    --创建加密测试表:
    SQL> CREATE TABLE test_encrypt(id INT,name VARCHAR,phonenumber VARCHAR);
    
    --使用常规非加密方式进行数据插入:
    SQL> INSERT INTO test_encrypt VALUES(1,'张大','13123456789')(2,'张二','13987654321');
    
    SQL> SELECT * FROM test_encrypt;
    
    ID | NAME | PHONENUMBER |
    ------------------------------------------------------------------------------
    1 | 张大| 13123456789|
    2 | 张二| 13987654321|
    
    --使用加密方式进行数据插入:
    SQL> INSERT INTO test_encrypt VALUES(3,'张三',encrypt_aes('18123456789','123456'));
    
    SQL> SELECT * FROM test_encrypt;
    
    ID | NAME | PHONENUMBER |
    ------------------------------------------------------------------------------
    1 | 张大| 13123456789|
    2 | 张二| 13987654321|
    3 | 张三| A44BC022C913BEF9F5ECFC0788310DD9|

    上述示例展示了将新插入数据进行加密,对新插入“张三”的“PHONENUMBER”进行查询以密文方式进行返回。

参数解释

参数名称参数类型参数解释
p_textRAW/VARCHAR要加密的资源
typINTEGER加密类型/套件,由块加密算法、模式、填充方式组成
v_textRAW/VARCHAR用于加密的密码
v_encRAW加密后返回密文

块加密算法说明

名称对应十进制数字十六进制数字
ENCRYPT_DES10x0001
ENCRYPT_3DES_2KEY20x0002
ENCRYPT_3DES30x0003
ENCRYPT_AES40x0004
ENCRYPT_PBE_MD5DES50x0005
ENCRYPT_AES12860x0006
ENCRYPT_AES19270x0007
ENCRYPT_AES25680x0008

块加密模式说明

名称对应十进制数字十六进制数字
CHAIN_CBC2560x0100
CHAIN_CFB5120x0200
CHAIN_ECB7680x0300
CHAIN_OFB10240x0400

块加密填充方式说明

名称对应十进制数字十六进制数字
PAD_PKCS540960x1000
PAD_NONE81920x2000
PAD_ZERO122880x3000
PAD_Xugu163840x4000

流加密算法说明

名称对应十进制数字十六进制数字
ENCRYPT_RC41290x0081