数据安全-动态加密(不同敏感字段使用不同的加密算法-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
BEGIN
	
	DECLARE result VARCHAR(500) DEFAULT '';
	SET result = (CASE WHEN p_key = 0 THEN CASE WHEN CHAR_LENGTH(p_text)=1 THEN p_text
		       WHEN 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))
		       END
	           WHEN 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_text
            when 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) end
     when 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;

效果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

天翼云登录参数JavaSrcipt逆向

天翼云登录参数 password 、comParam_curTime、comParam_seqCode、comParam_signature JavaSrcipt逆向 目标网站 https://m.ctyun.cn/wap/main/auth/login?redirect/my 目标参数 要逆向的有 password、comParam_curTime、comParam_seqCode、comParam_signature 四个参数 …

【摸鱼日常】使用Docker部署2048小游戏

一、本次实践介绍 ​1. 本次实践简介 本次实践部署环境为个人测试环境,快速使用docker部署2048小游戏。 rootWellDone:/home/goodjob# uname -aLinux WellDone 6.5.0-14-generic #14~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 20 18:15:30 UTC 2 x86_64 x86_64…

从零开始手写mmo游戏从框架到爆炸(二十四)— 装备系统二

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 本章主要是补充装备工厂,增加根据野怪等级和品质获得装备的方法: 增加的代码如下- EquipmentFactory: public static Equipment createEquipment(Monste…

pyspark分布式部署随机森林算法

前言 分布式算法的文章我早就想写了,但是一直比较忙,没有写,最近一个项目又用到了,就记录一下运用Spark部署机器学习分类算法-随机森林的记录过程,写了一个demo。 基于pyspark的随机森林算法预测客户 本次实验采用的…

目标检测-Transformer-ViT和DETR

文章目录 前言一、ViT应用和结论结构及创新点 二、DETR应用和结论结构及创新点 总结 前言 随着Transformer爆火以来,NLP领域迎来了大模型时代,成为AI目前最先进和火爆的领域,介于Transformer的先进性,基于Transformer架构的CV模型…

240Hz高刷电竞显示器 - HKC VG253KM

🎉🎉🎉 各位电竞爱好者们,今天给大家带来一款神秘武器,一款能够让你在游戏中大展拳脚的高刷电竞显示器 - HKC VG253KM!🔥🔥🔥 这款显示器,哎呀,真…

【Vue3】插槽使用和animate使用

插槽使用 插槽slot匿名插槽具名插槽插槽作用域简写 动态插槽transition动画组件自定义过渡class类名如何使用animate动画库组件动画生命周期appear transition- group过渡列表 插槽slot 插槽就是子组件中提供给父组件使用的一个占位符父组件可以在这个占位符智能填充任何模板代…

深度学习 精选笔记(3)线性神经网络-线性回归

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

spring boot 集成科大讯飞星火认知大模型

首先到官网https://console.xfyun.cn/services/aidoc申请key 一、安装依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&…

记录 | docker权限原因导致service ssh start失败

【报错】 容器内启 ssh server 报错 有两个错&#xff1a; &#xff08;1&#xff09;/etc/ssh/sshd_host_rsa_key 权限太高&#xff1b; &#xff08;2&#xff09;/run/sshd用户组不为 root 解决方法&#xff1a; 方法一&#xff1a; 各自容器内对/etc/ssh/sshd_host_r…

41.仿简道云公式函数实战-数学函数-SUMIF

1. SUMIF函数 SUMIF 函数可用于计算子表单中满足某一条件的数字相加并返回和。 2. 函数用法 SUMIF(range, criteria, [sum_range]) 其中各参数的含义及使用方法如下&#xff1a; range&#xff1a;必需&#xff1b;根据 criteria 的条件规则进行检测的判断字段。支持的字段…

Spring篇----第九篇

系列文章目录 文章目录 系列文章目录前言一、@Qualifier 注解有什么用?二、@RequestMapping 注解有什么用?三、spring DAO 有什么用?四、列举 Spring DAO 抛出的异常。前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到…

精益思维引领AI创新浪潮:从理念到实践的蜕变!

在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;精益思维作为一种追求卓越、持续改进的管理哲学&#xff0c;正逐渐成为推动AI创新的重要动力。本文&#xff0c;天行健咨询将探讨精益思维如何与AI创新相结合&#xff0c;以及这种结合如何推动科技进步和社会发…

JetBrains系列工具,配置PlantUML绘图

PlantUML是一个很强大的绘图工具&#xff0c;各种图都可以绘制&#xff0c;具体的可以去官网看看&#xff0c;或者百度。 PlantUML简述 https://plantuml.com/zh/ PlantUML语言参考指引 https://plantuml.com/zh/guide PlantUML语言是依赖Graphviz进行解析的。Graphviz是开源…

每日一题 2867统计树中的合法路径

2867. 统计树中的合法路径数目 题目描述&#xff1a; 给你一棵 n 个节点的无向树&#xff0c;节点编号为 1 到 n 。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ui, vi] 表示节点 ui 和 vi 在树中有一条边。 请你返回树中的 合法路…

【Linux深入剖析】进程优先级 | 命令行参数 | 环境变量

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.进程优先级2.Linux…

hot100刷题记录-哈希

一、两数之和 题目&#xff1a;https://leetcode.cn/problems/two-sum/description/?envTypestudy-plan-v2&envIdtop-100-liked 方法1&#xff1a;枚举 class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for id, num in enumerate(nums)…

jmeter 按线程数阶梯式压测数据库

当前版本&#xff1a; jmeter 5.6.3mysql 5.7.39 简介 JMeter 通过 bzm - Concurrency Thread Group 来实现阶梯式压测&#xff0c;它并不是JMeter的官方插件&#xff0c;而是一种由Blazemeter提供的高级线程组插件。可以在不同的时间内并发执行不同数量的线程&#xff0c;模拟…

相册图片怎么压缩?3种方法教你压缩图片

相册图片怎么压缩&#xff1f;相册图片压缩在日常生活中扮演着至关重要的角色。它不仅能够帮助我们节省手机或电脑的存储空间&#xff0c;避免设备因存储空间不足而运行缓慢&#xff0c;还能显著减少图片在上传、下载或分享时的时间。此外&#xff0c;压缩图片还能在一定程度上…

[算法沉淀记录] 排序算法 —— 选择排序

排序算法 —— 选择排序 基本概念 选择排序是一种简单的排序算法&#xff0c;它的工作原理是每次从待排序的列表中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其与列表中的第一个位置交换&#xff0c;然后继续对剩余的元素进行排序&#xff0c;直到整个列表…