【data masking】遮盖脱敏方式与替换脱敏方式的简单实现
一.【遮盖脱敏方式】
需求:将十位数字遮盖中间四位
实现一:substr方法(不可逆,脱敏前后等长)
代码:
select substr('1234567890',1,3)||'****'||substr('1234567890',-3) as masked from dual
效果:
1234567890->123****890
实现二:replace+substr(不可逆,脱敏前后等长)
代码:
select replace('1234567890',substr('1234567890',4,4),'****') as masked from dual
效果:
1234567890->123****890
实现三:regexp_replace(不可逆,脱敏前后等长)
代码:
select regexp_replace('0123456789','\w{4}','****',4,1,'i') as masked from dual;
效果:
1234567890->012****789
二.【替换脱敏方式】
需求:将字符串中字符替换成其asc码
实现一:utl_raw.cast_to_raw/utl_raw.cast_to_varchar2(可逆,脱敏前后不等长)
加密代码:
select utl_raw.cast_to_raw('1234567890') as masked from dual
效果:
1234567890->31323334353637383930
解密代码:
select utl_raw.cast_to_varchar2('31323334353637383930') as real from dual
效果:
31323334353637383930->1234567890
实现二:utl_i18n.string_to_raw/utl_i18n.raw_to_char(可逆,脱敏前后不等长)
加密代码:
select utl_i18n.string_to_raw('1234567890') as masked from dual;
效果:
1234567890->31323334353637383930
解密代码:
select utl_i18n.raw_to_char('31323334353637383930') from dual;
效果:
31323334353637383930->1234567890
实现三:translate(可逆,前后等长)
加密代码:
select translate('69547963','0123456789','abcdefghij') as masked from dual
效果:
69547963->gjfehjgd
解密代码:
select translate('gjfehjgd','abcdefghij','0123456789') as real from dual
效果:
gjfehjgd->69547963
三.【算法替换脱敏方式】
1.摘要算法
MD5(变长,不可逆)
定义:
CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2) RETURN VARCHAR2 IS retval varchar2(32); BEGIN retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) ; RETURN retval; END; /
使用:
SQL> select MD5(1234) from dual; MD5(1234) -------------------------------------------------------------------------------- 81DC9BDB52D04DC20036DBD8313ED055
2.对称加密算法DES(变长,可逆)
加密函数定义:
create or replace function encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is v_text varchar2(4000); v_enc varchar2(4000); raw_input RAW(128) ; key_input RAW(128) ; decrypted_raw RAW(2048); begin v_text := rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0)); raw_input := UTL_RAW.CAST_TO_RAW(v_text); key_input := UTL_RAW.CAST_TO_RAW(p_key); dbms_obfuscation_toolkit.DESEncrypt(input => raw_input,key => key_input,encrypted_data =>decrypted_raw); v_enc := rawtohex(decrypted_raw); dbms_output.put_line(v_enc); return v_enc; end; /
使用:
SQL> select encrypt_des('abcdefg','1234567890') from dual; ENCRYPT_DES('ABCDEFG','1234567890') -------------------------------------------------------------------------------- 83560CA9BEEDD88D
解密函数定义:
create or replace function decrypt_des(p_text varchar2,p_key varchar2) return varchar2 is v_text varchar2(2000); begin dbms_obfuscation_toolkit.DESDECRYPT(input_string => UTL_RAW.CAST_TO_varchar2(p_text),key_string =>p_key, decrypted_string=> v_text); v_text := rtrim(v_text,chr(0)); dbms_output.put_line(v_text); return v_text; end; /
使用:
SQL> select decrypt_des('83560CA9BEEDD88D','1234567890') from dual; DECRYPT_DES('83560CA9BEEDD88D','1234567890') -------------------------------------------------------------------------------- abcdefg
参考资料:
1. https://www.cnblogs.com/shanshanliu/p/6247761.html
2.https://blog.csdn.net/weixin_36408281/article/details/53380332
3.https://blog.csdn.net/weixin_42054155/article/details/98666341
4.https://www.cnblogs.com/buffercache/p/10209470.html
END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2020-03-07 你会Spring Cloud吗?
2020-03-07 【Canvas与旗帜】红黄光芒海军旗
2019-03-07 【Canvas与艺术】五角星光芒四射的效果展示