系统包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_text | RAW/VARCHAR | 要加密的资源 |
typ | INTEGER | 加密类型/套件,由块加密算法、模式、填充方式组成 |
v_text | RAW/VARCHAR | 用于加密的密码 |
v_enc | RAW | 加密后返回密文 |
块加密算法说明
名称 | 对应十进制数字 | 十六进制数字 |
---|---|---|
ENCRYPT_DES | 1 | 0x0001 |
ENCRYPT_3DES_2KEY | 2 | 0x0002 |
ENCRYPT_3DES | 3 | 0x0003 |
ENCRYPT_AES | 4 | 0x0004 |
ENCRYPT_PBE_MD5DES | 5 | 0x0005 |
ENCRYPT_AES128 | 6 | 0x0006 |
ENCRYPT_AES192 | 7 | 0x0007 |
ENCRYPT_AES256 | 8 | 0x0008 |
块加密模式说明
名称 | 对应十进制数字 | 十六进制数字 |
---|---|---|
CHAIN_CBC | 256 | 0x0100 |
CHAIN_CFB | 512 | 0x0200 |
CHAIN_ECB | 768 | 0x0300 |
CHAIN_OFB | 1024 | 0x0400 |
块加密填充方式说明
名称 | 对应十进制数字 | 十六进制数字 |
---|---|---|
PAD_PKCS5 | 4096 | 0x1000 |
PAD_NONE | 8192 | 0x2000 |
PAD_ZERO | 12288 | 0x3000 |
PAD_Xugu | 16384 | 0x4000 |
流加密算法说明
名称 | 对应十进制数字 | 十六进制数字 |
---|---|---|
ENCRYPT_RC4 | 129 | 0x0081 |