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

news2024/9/28 6:29:01

在这里插入图片描述

动态数据加密

动态加密(也称实时加密,透明加密等,其英文名为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;

效果

在这里插入图片描述

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

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

相关文章

服务器权限:Error: EACCES: permission denied, open‘/Cardiac/uniquC.csv

背景: 我想在服务器上传一个文件uniquC.csv,但是服务器说我没有权限 解决方案: 1. 查看目前是否存在对文件夹的权限 ls -ld /Cardiac/ # your fold path 此时,我发现 这也意味着root也没有赋予写的权限。 2. 拿到root权限 …

Python爬虫-模拟Github登录并获取个人信息

爬虫系列:http://t.csdnimg.cn/WfCSx 前言 很多情况下,页面的某些信息需要登录才可以查看。对于爬虫来说,需要爬取的信息如果需要登录才可以看到的话,那么我们就需要做一些模拟登录的事情。 在前面我们了解了会话和 Cookies 的…

人脸2D和3D道具SDK解决方案提供商

人脸识别和增强现实技术成为了许多企业和开发者关注的焦点,为了满足市场对高质量、易于集成的人脸识别SDK的需求,美摄科技推出了一系列领先的人脸2D/3D道具SDK解决方案。 一、产品特点 高精度识别:美摄科技的人脸识别技术采用深度学习算法&…

【博士每天一篇文献-综述】A Modified Echo State Network Model Using Non-Random Topology

阅读时间:2023-11-23 1 介绍 年份:2023 作者: Arroyo, Diana Carolina Roca,数学与计算机科学研究所(ICMC)圣保罗大学 (USP) 期刊: 博士论文 引用量:0 这篇论文是一篇博士论文&am…

PostgreSQL 与MySQL 对比使用

一、前言 博主的系统既有 用到MySQL 也有用到PostgreSQL ,之所以用到这两种数据库,主要是现在都是国产替代,虽然说这两款数据库也不是国产的,但是相对开源,oracle是不让用了。所以现在使用比较多的就是这两个关系型数据…

geotools解析shp 提示 opengis.*.SimpleFeatureType‘ 不在其界限内

问题:( geotools.version:31-SNAPSHOT) 解析shp文件时提示类型SimpleFeatureType不在其界限内 解决: 在引用处将org.opengis.feature.simple.SimpleFeatureType 改为 org.geotools.api.feature.simple.SimpleFeatureType

Web JavaScript

目录 1 前言2 原生js常见用法2.1 弹窗操作2.2 for循环操作2.3 打印日志操作2.4 获取页面值操作2.5 判空操作2.6 修改页面内容操作2.7 网页版计算器制作 3 外部js常见用法4 总结 1 前言 JavaScript 是一种脚本,一门编程语言,它可以在网页上实现复杂的功能…

jvm面试题目补充

jdk&jre Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK(Java Development Kit)。 把Java API类库中的Java SE API子集 [1] 和Java虚拟机这两部分统称为JRE(Java Runtime Environment),JRE是支持…

缓存一致性问题的解决策略

缓存一致性问题的背景和概念介绍 在一个系统中,我们通常使用数据库来存储数据,以保证数据的持久性。但是,由于数据库的读写速度相对较慢,如果每次请求都直接访问数据库,会降低系统的响应速度。为了提高系统的性能&…

进行模型测量这种量出来坡面的是平面面积还是真实面积?

斜面面积,不是表面积。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。 #DasViewer##实景三维##三维重建##三维模型…

产品经理学习-产品运营《什么是SOP》

目录 什么是SOP 如何执行SOP 执行SOP的重点 什么是SOP SOP就是项目流程操作的说明书 日常工作中的例行操作: 例行操作是指,在每一天,针对每一个用户,在每个项目之中,都必须完成的操作,这些必须完成的操…

Java 的静态代理和动态代理

文章目录 1. 代理设计模式1.1 为什么需要代理设计模式1.2 代理设计模式1.2.1 概念1.2.2 名词解释1.2.3 代理开发的核⼼要素 2. 静态代理2.1 编码2.2 静态代理存在的问题 3. 动态代理3.1 Spring动态代理的概念3.2 动态代理细节分析3.3 动态代理的实现3.3.1 JDK 动态代理3.3.2 CG…

apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$@“

[TOC](apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$”) 1、问题描述 apache 启动报错 apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$” 2、问题分析 参考链接: https://stackoverflow.com/questions/43726930/apache…

我的服务器为什么会被攻击?

时常的网站运行中,很多站长可能会遇到网站被黑客攻击的情况,其中同行之间恶性竞争,不正当的竞争关系,导致互联网关系越来越差,攻击的方式多种多样,网站遭受攻击的频次也越来越高。其次,就网络黑…

CUDA编程 - 用向量化访存优化 elementwise 核函数 - 学习记录

Cuda elementwise 一、简介1.1、ElementWise1.2、 float4 - 向量化访存 二、实践2.1、如何使用向量化访存2.2、Cuda elementwise - Add2.3、Cuda elementwise - Sigmoid2.3.1、简单的 Sigmoid 函数2.3.2、ElementWise Sigmoid float4(向量化访存) 2.4、C…

Facebook与社交创新:数字时代的社交构建者

在当今数字化时代,社交媒体已经成为人们日常生活中不可或缺的一部分。而在这个庞大的社交网络中,Facebook作为其中的巨头之一,不仅扮演着连接人们的桥梁,更是社交创新的领导者和推动者。本文将探讨Facebook在数字时代的社交构建中…

算法打卡day3|链表篇|Leetcode 203.移除链表元素、 707.设计链表 、 206.反转链表

链表基本概念 定义 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。其…

leetcode.无重复字符的最长字串(刷题日记)

自从刷题开始之后,就突然有种感觉。 就是在刷完题之后当时是知道方法了,但是当再次遇到知道就又不会做了,就只好打开解题观摩大佬的代码,你别说,每次都感觉自己是s13。 所以我就想通过写博客来总结一下每次做完新的题…

十一、计算机视觉-膨胀操作

文章目录 前言一、什么是膨胀二、膨胀操作的实现1.引入库 三、膨胀的原理 前言 上节我们学习了腐蚀操作,本节我们讲一下膨胀操作,膨胀和腐蚀实际上是相反的操作。上节我们把云峰这2个字周围没用的像素去掉了,但是云峰这2个字也变细了&#x…

C#,弗洛伊德-瑞文斯特(Floyd-Rivest)算法与源代码

Robert W. Floyd 1 Floyd-Rivest 算法 Floyd-Rivest 算法是一种选择算法,用于在不同元素的数组中找到第k个最小元素。它类似于快速选择算法,但在实际运行中有更好的运行时间。 和 QuickSelect 一样,该算法基于分区的思想工作。对数组进行分…