美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。
AES加解密的流程图如下:
实现AES加解密的存储过程代码如下:
-- 加密
CREATE OR REPLACE FUNCTION FUN_AESENCRYPT(
V_STR VARCHAR2 ,
V_KEY VARCHAR2
)
RETURN VARCHAR2
AS
V_KEY_RAW RAW(128);
V_STR_RAW RAW(512);
V_RETURN_STR VARCHAR2(512);
V_TYPE PLS_INTEGER ;
BEGIN
V_KEY_RAW := UTL_I18N.STRING_TO_RAW(V_KEY,'UTF8') ;
V_STR_RAW := UTL_I18N.STRING_TO_RAW(V_STR,'UTF8') ;
V_TYPE := DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5 ;
V_STR_RAW := DBMS_CRYPTO.ENCRYPT(SRC => V_STR_RAW , typ => V_TYPE, key => V_KEY_RAW) ;
V_RETURN_STR := RAWTOHEX(V_STR_RAW);
RETURN V_RETURN_STR;
END;
grant execute on dbms_crypto to welf;
update operator a set a.loginname = utl_raw.cast_to_varchar2(utl_encode.base64_encode(FUN_AESENCRYPT(a.loginname,'0123456789abcdef0123456789abcdef')))
where a.loginname is not null;
update customer a set a.mobile = utl_raw.cast_to_varchar2(utl_encode.base64_encode(FUN_AESENCRYPT(a.mobile,'0123456789abcdef0123456789abcdef')))
where a.mobile is not null;
update t_order_info a set a.phone_no =utl_raw.cast_to_varchar2(utl_encode.base64_encode(FUN_AESENCRYPT(a.phone_no,'0123456789abcdef0123456789abcdef')))
where a.phone_no is not null;
----- 解密
CREATE OR REPLACE FUNCTION FUN_DECRYPTION(
V_STR VARCHAR2 ,
V_KEY VARCHAR2
)
RETURN VARCHAR2
AS
V_KEY_RAW RAW(128);
V_STR_RAW RAW(512);
V_RETURN_STR VARCHAR2(512);
V_TYPE PLS_INTEGER;
BEGIN
V_KEY_RAW := UTL_I18N.STRING_TO_RAW(V_KEY,'UTF8');
V_STR_RAW := HEXTORAW(V_STR);
V_TYPE := DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5;
V_STR_RAW := DBMS_CRYPTO.DECRYPT(SRC => V_STR_RAW , typ => V_TYPE, key => V_KEY_RAW );
V_RETURN_STR := UTL_I18N.RAW_TO_CHAR(V_STR_RAW,'UTF8');
RETURN V_RETURN_STR ;
END;