数据安全-动态加密(不同敏感字段使用不同的加密算法-MySQL、Oracle版本)

在这里插入图片描述

动态数据加密

动态加密(也称实时加密,透明加密等,其英文名为encrypt on-the-fly),是指数据在使用过程中自动对数据进行加密或解密操作,无需用户的干预,合法用户在使用加密的文件前,也不需要进行解密操作即可使用,表面看来,访问加密的文件和访问未加密的文件基本相同,对合法用户来说,这些加密文件是“透明的”,即好像没有加密一样,但对于没有访问权限的用户,即使通过其它非常规手段得到了这些文件,由于文件是加密的,因此也无法使用。

加密要求

基于不同的敏感字段,使用不用的加密算法
【2.1】姓名:两种脱敏方式:1)姓名有2位,脱敏第二位;大于2位,脱敏中间位。比如:张*,张三,张**三;
【2.2】身份证号码:屏蔽后6位,同时使用身份证号对应MD5码作为唯一性识别;
【2.3】军官证号码、护照号码:屏蔽中间3-6位,例如E0
961;
身份证号码、军官证号码、护照号码:屏蔽后6位;
【2.4】手机号码:显示前3位+
+后4位
【2.5】固定电话:显示前4位+
+后2位
【2.6】电子邮箱:@前面3位+
,@后面完整显示
【2.7】地址:显示前3位,后面全部显示

【2.8】微信OPENID:直接使用MD5转换
【2.9】银行卡卡号:显示前6+(实际位数)+后4位
【2.10】其他敏感数据(学历、婚姻状况等):
*****

基于函数方式实现MySQL、Oracle数据库动态加密

MySQL 版本

示例图下:

DELIMITER $$USE `db`$$DROP FUNCTION IF EXISTS `f_encrypt`$$CREATE FUNCTION `f_encrypt`(p_text VARCHAR(500),p_key INT) RETURNS VARCHAR(500) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci
BEGINDECLARE result VARCHAR(500) DEFAULT '';SET result = (CASE WHEN p_key = 0 THEN CASE WHEN CHAR_LENGTH(p_text)=1 THEN p_textWHEN CHAR_LENGTH(p_text)=2 THEN CONCAT(SUBSTR(p_text,1,1),'*')ELSE CONCAT(SUBSTR(p_text,1,1),REPEAT('*',CHAR_LENGTH(SUBSTR(SUBSTR(p_text,2,LENGTH(p_text)),1,CHAR_LENGTH(SUBSTR(p_text,2,LENGTH(p_text)))-1))),SUBSTR(p_text,-1,1))ENDWHEN p_key = 1 THEN INSERT(p_text,LENGTH(p_text)-5,6,'******')WHEN p_key = 2 THEN CONCAT(SUBSTR(p_text,1,3),REPEAT('*',CHAR_LENGTH(SUBSTR(SUBSTR(p_text,4,CHAR_LENGTH(p_text)),1,CHAR_LENGTH(SUBSTR(p_text,4,CHAR_LENGTH(p_text)))-4))),SUBSTR(p_text,CHAR_LENGTH(p_text)-3,4))WHEN p_key = 3 THEN CONCAT(SUBSTR(p_text,1,4),REPEAT('*',CHAR_LENGTH(SUBSTR(SUBSTR(p_text,5,CHAR_LENGTH(p_text)),1,CHAR_LENGTH(SUBSTR(p_text,5,CHAR_LENGTH(p_text)))-2))),SUBSTR(p_text,CHAR_LENGTH(p_text)-1,2))WHEN p_key = 4 THEN INSERT(p_text,1,3,'***')WHEN p_key = 5 THEN CONCAT(SUBSTR(p_text,1,3),REPEAT('*',CHAR_LENGTH(SUBSTR(p_text,4,LENGTH(p_text)))))WHEN p_key = 6 THEN MD5(p_text)WHEN p_key = 7 THEN CONCAT(SUBSTR(p_text,1,6),REPEAT('*',CHAR_LENGTH(SUBSTR(SUBSTR(p_text,7,CHAR_LENGTH(p_text)),1,CHAR_LENGTH(SUBSTR(p_text,7,CHAR_LENGTH(p_text)))-4))),SUBSTR(p_text,CHAR_LENGTH(p_text)-6,4))WHEN p_key = 8 THEN SHA2(p_text,256)WHEN p_key IS NULL THEN '******'		   ELSE '******' END);RETURN result;
END$$DELIMITER ;

Oracle 版本

示例如下:

CREATE OR REPLACE FUNCTION MD5( passwd IN VARCHAR2) RETURN VARCHAR2
IS
retval varchar2(32);
BEGIN
retval := (case when passwd is null then null else utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) end);
RETURN lower(retval);
END;
/
commit;create or replace function f_encrypt(p_text varchar2, p_key int) return varchar2 is
v_enc varchar2(4000);
begin
v_enc := case when p_key =0 then case when length(p_text)=1 then p_textwhen length(p_text)=2 then substr(p_text,1,1)||'*'else substr(p_text,1,1)||lpad('*',length(substr(substr(p_text,2,length(p_text)),1,length(substr(p_text,2,length(p_text)))-1)),'*') ||  substr(p_text,-1,1) endwhen p_key =1 then substr(p_text,1,length(p_text)-6)||'******' when p_key =2 then substr(p_text,1,3)||'****'||substr(p_text,length(p_text)-3,length(p_text))when p_key =3 then substr(p_text,1,4)||regexp_replace(substr(substr(p_text,1,length(p_text)-2),5,length(substr(p_text,1,length(p_text)-2))),'[0-9]','*')||substr(p_text,length(p_text)-1,length(p_text))when p_key =4 then '***'||substr(substr(p_text,1,INSTRB(p_text,'@',1,1)-1),4,length(substr(p_text,1,INSTRB(p_text,'@',1,1)-1)))||substr(p_text,INSTRB(p_text,'@',1,1))when p_key =5 then substr(p_text,1,3)|| rpad('*',length(p_text)-3,'*')when p_key =6 then md5(p_text)when p_key =7 then substr(p_text,1,6)||rpad('*',length(p_text)-10,'*')||substr(p_text,length(p_text)-3,length(p_text))when p_key =8 then SHA256(p_text)when p_key is NULL then '******'else '******' end;
return v_enc;
end;

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2812327.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

LVGL 环境搭建-基于WSL

背景说明 小白刚开始接触LVGL,前些日子狠心花198元入手了一块堪称LVGL 入门利器~HMI-Board 开发板,虽然有RT-Thread 集成好的LVGL 环境,只需要几个步骤就能成功把lvgl 的示例运行起来,对于爱折腾的我来说,过于简单也并…

变大再变大,matplotlib坐标轴刻度设置

文章目录 对数坐标系自定义映射对数图表重置刻度 matplotlib教程:初步📈子图绘制📈坐标投影 matplotlib支持重设坐标轴刻度,包括刻度值的重新映射和刻度标签的重新映射。前者可以调整坐标刻度的缩放比例,后者可以更改…

Jmeter系列(2)目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前,需要先对工具的目录有些了解,也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…

pycharm如何安装pygame库

pycharm如何安装pygame库 PyCharm是Python中广受欢迎的一种IDE,它可以为用户提供许多工具和便利的服务,从而大大提高开发效率。pygame库可以用python进行游戏开发提供很好的支持,那么在ptcharm中如何安装pygame库呢? 一、安装步…

vue项目build 静态文件部署到fastapi后台中访问白屏,访问不到?

正常创建VUE项目那些应该都会,到项目最后 npm run build然后会生成一个dist文件夹 然后把这个文件夹的东西复制去到fastapi项目根目录创建一个static文件夹 然后开始写点代码 # main.py绑定静态文件目录 app.mount("/static", StaticFiles(directory&…

[算法沉淀记录] 排序算法 —— 堆排序

排序算法 —— 堆排序 算法基础介绍 堆排序(Heap Sort)是一种基于比较的排序算法,它利用堆这种数据结构来实现排序。堆是一种特殊的完全二叉树,其中每个节点的值都必须大于或等于(最大堆)或小于或等于&am…

goland配置新增文件头

参考: goland函数注释生成插件 goland函数注释生成插件_goland自动加函数说明-CSDN博客 GoLand 快速添加方法注释 GoLand 快速添加方法注释_goland批量注释-CSDN博客 goland 如何设置头注释,自定义author和data goland 如何设置头注释,自定…

【踩坑】修复xrdp无法关闭Authentication Required验证窗口

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 问题如下,时不时出现,有时还怎么都关不掉,很烦: 解决方法一:命令行输入 dbus-send --typemethod_call --destorg.gnome.Shell /org/gnome/Shell org.gn…

【web APIs】1、(学习笔记)有案例!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、概念二、使用步骤1.获取DOM对象2.操作元素内容3.属性修改3.1.常用属性修改3.2.控制样式属性3.3.操作类名(className) 操作CSS3.4.操作表单元素属性3.5.自定…

Mycat核心教程--ZooKeeper集群搭建【三】

Mycat核心教程--ZooKeeper集群搭建 八、 ZooKeeper集群搭建8.1.ZooKeeper简介8.2.数据复制的好处8.3.Zookeeper设计目的8.4.zookeeper集群包括3种角色8.4.1.Leader角色8.4.2.Follower 角色8.4.3.Observer 角色 8.5.zookeeper集群工作流程8.6.zookeeper集群节点数量为奇数&#…

如何选择适合的工具,将由图片合成的PDF转为Excel?

在数字化时代,PDF文件已经成为我们日常工作中不可或缺的一部分。然而,有时候我们需要将这些PDF文件中的图片转换成Excel格式,以便进行进一步的数据分析和处理。这时,选择一款适合的由图片组成的PDF转Excel工具就显得尤为重要。本文…

mysql order by布尔盲注

什么是order by 在MySQL支持使用ORDER BY语句对查询结果集进行排序处理,使用ORDER BY语句不仅支持对单列数据的排序,还支持对数据表中多列数据的排序。语法格式如下 select * from 表名 order by 列名(或者数字) asc;升序(默认升序) selec…

东莞IBM服务器维修之IBM x3630 M4阵列恢复

记录东莞某抖音电商公司送修一台IBM SYSTEM X3630 M4文档服务器RAID6故障导致数据丢失的恢复案例 时间:2024年02月20日, 服务器品牌:IBM System x3630 M4,阵列卡用的是DELL PERC H730P 服务器用途和用户位置:某抖音电…

深度学习目标检测】二十、基于深度学习的雾天行人车辆检测系统-含数据集、GUI和源码(python,yolov8)

雾天车辆行人检测在多种场景中扮演着至关重要的角色。以下是其作用的几个主要方面: 安全性提升:雾天能见度低,视线受阻,这使得驾驶者和行人在道路上的感知能力大大降低。通过车辆行人检测技术,可以在雾天条件下及时发现…

GEE数据集——全球 30 米不透水表面动态数据集 (GISD30)

全球 30 米不透水表面动态数据集 (GISD30) 全球 30 米不透水表面动态数据集 (GISD30) 为了解 1985 年至 2020 年全球不断变化的不透水表面景观提供了宝贵的资源。该数据集在城市可持续发展、人为碳排放评估和全球生态环境建模等领域具有深远的科学意义和实际应用价值。GISD30 是…

高数考研 -- 公式总结(更新中)

1. 两个重要极限 (1) lim ⁡ x → 0 sin ⁡ x x 1 \lim _{x \rightarrow 0} \frac{\sin x}{x}1 limx→0​xsinx​1, 推广形式 lim ⁡ f ( x ) → 0 sin ⁡ f ( x ) f ( x ) 1 \lim _{f(x) \rightarrow 0} \frac{\sin f(x)}{f(x)}1 limf(x)→0​f(x)sinf(x)​1. (2) lim ⁡…

ABAP 发送带EXCEL邮件

前言 没啥特殊需求,就是有个库龄报表用户想整邮件发送 实现 用的最简单的XLS文件作为excel附件发送出去 观察XLS文件的纯文本格式,每列之间用TAB制表符分隔,每行之间用回车符分隔 思路也比较明确,在SAP中实现这种格式&#xf…

命名元组(python)

命名元组与元组的差异,命名元组和字典,哪个效率更高。 (笔记模板由python脚本于2024年02月26日 12:31:36创建,本篇笔记适合熟悉python元组和字典的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ F…

面试redis篇-13Redis为什么那么快

Redis是纯内存操作,执行速度非常快采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题使用I/O多路复用模型,非阻塞IOI/O多路复用模型 Redis是纯内存操作,执行速度非常快,它的性能瓶颈是网络延迟而不是执行速度, I/O多路复用模型主要就是实现了高效…