当前位置: 首页 > news >正文

透明加密技术

透明加密技术,也被称为透明数据加密(Transparent Data Encryption, TDE),是一种加密方法,它允许数据在存储时自动加密和解密,而不需要用户进行任何手动操作。透明加密技术主要应用于数据库、文件系统和磁盘加密,以确保静态数据的安全性。

关键特性

  1. 透明性:对应用程序和用户是透明的,应用程序不需要做任何改变,用户也不需要手动加密或解密数据。

  2. 实时加密和解密:数据在写入存储时自动加密,在读取时自动解密,这一过程是即时的,不会对性能造成明显影响。

  3. 密钥管理:通常使用专门的密钥管理系统(KMS)来管理加密密钥。密钥的安全性对整体系统至关重要。

  4. 数据完整性保护:除了加密,透明加密技术通常还会提供数据完整性保护,防止数据被篡改。

常见应用场景

  • 数据库:许多数据库系统(如Oracle、SQL Server、MySQL等)都提供了透明数据加密功能,用于保护存储在数据库中的敏感数据。
  • 文件系统:一些操作系统提供透明加密功能,可以保护磁盘上的文件和文件夹。
  • 云存储:许多云服务提供商(如AWS、Azure)也采用透明加密技术来保护云端存储的数据。

优点

  • 易用性:对用户和应用程序透明,无需对现有系统进行大规模修改。
  • 安全性:自动保护静态数据,防止数据泄露。
  • 合规性:帮助企业满足数据保护法规的要求,如GDPR、HIPAA等。

潜在挑战

  • 密钥管理:密钥的安全存储和管理至关重要,如果密钥泄露,加密的数据也会变得不安全。
  • 性能影响:虽然通常性能影响较小,但在高性能应用中,透明加密可能带来一定的性能开销。

透明加密技术通过自动化和透明化的方式提供了强大的数据保护能力,广泛应用于需要保护敏感信息的各种场景中。

一个典型的应用就是企业内部的数据加密。在公司内网里,安装了加密服务的电脑可以正常打开各类文件,但是如果将数据拷贝出来,在另一台没装加密服务的电脑或脱离内网连接的电脑上打开,则文件内容显示均为乱码,可以有效的保障企业数据安全。

接下来简单介绍下原理。

假设我们现在要做一款这样的软件,为了简单,不考虑联网只在本地运行,即运行了加密软件就可以正常读写文件,但这些文件放到别的没有加密软件的电脑则显示乱码。

首先我们得先确定用什么加密算法,由于我们还需要解密还原,所以必须使用可逆的加密算法,这样加密后才能解密还原,常用的AES就可以。

从操作方式上来说,我们希望文件拷贝出去后是加密的乱码,那么常态情况下文件肯定是被加密了的。在安装了加密软件的电脑上可以正常显示,说明在打开的一瞬间,加密软件进行了解密操作。也就是说,在硬盘上的文件都是加密的,但是读到内存中的数据是解密的。

由于用户操作的随机性,必须要有一种监测手段,能够知道用户操作了哪些文件,修改了什么,这样只针对这一个具体的文件做加解密操作,以现代电脑的速度执行起来是很快的,基本可以做到用户无感。

基本确定软件逻辑了,首先软件启动后会监控硬盘路径下的文件操作,如果是文件打开,则执行解密程序使得可以正常显示,当用户进行编辑时,不做任何处理,一旦用户执行保存操作,则执行加密程序将数据写入存储。

所以有个核心功能就是监测文件操作,在Windows下,监控文件的修改还是比较简单的,下面是一段示例代码。

#include <windows.h>
#include <iostream>
#include <string>void MonitorDirectory(const std::wstring& directory) {// 打开目录句柄HANDLE hDir = CreateFile(directory.c_str(),                // 目录路径FILE_LIST_DIRECTORY,              // 访问权限:监控目录内容FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, // 共享模式:允许其他进程读取、写入或删除NULL,                             // 安全属性OPEN_EXISTING,                    // 打开已存在的目录FILE_FLAG_BACKUP_SEMANTICS,       // 打开目录时需要的标志NULL                              // 模板文件句柄);if (hDir == INVALID_HANDLE_VALUE) {std::cerr << "Failed to open directory handle. Error: " << GetLastError() << std::endl;return;}char buffer[1024];DWORD bytesReturned;while (true) {// 监听目录的变化if (ReadDirectoryChangesW(hDir,                          // 目录句柄&buffer,                       // 缓存区sizeof(buffer),                // 缓存区大小TRUE,                          // 监听子目录FILE_NOTIFY_CHANGE_FILE_NAME | // 监控文件名的变化FILE_NOTIFY_CHANGE_LAST_WRITE, // 监控文件修改&bytesReturned,                // 返回的字节数NULL,                          // 重叠I/ONULL                           // 完成例程)) {FILE_NOTIFY_INFORMATION* pNotify;int offset = 0;do {pNotify = (FILE_NOTIFY_INFORMATION*)&buffer[offset];std::wstring fileName(pNotify->FileName, pNotify->FileNameLength / sizeof(WCHAR));switch (pNotify->Action) {case FILE_ACTION_ADDED:std::wcout << L"File created: " << fileName << std::endl;break;case FILE_ACTION_REMOVED:std::wcout << L"File deleted: " << fileName << std::endl;break;case FILE_ACTION_MODIFIED:std::wcout << L"File modified: " << fileName << std::endl;break;case FILE_ACTION_RENAMED_OLD_NAME:std::wcout << L"File renamed (old name): " << fileName << std::endl;break;case FILE_ACTION_RENAMED_NEW_NAME:std::wcout << L"File renamed (new name): " << fileName << std::endl;break;default:std::wcout << L"Unknown action." << std::endl;break;}offset += pNotify->NextEntryOffset;} while (pNotify->NextEntryOffset != 0);} else {std::cerr << "Failed to read directory changes. Error: " << GetLastError() << std::endl;break;}}CloseHandle(hDir);
}int main() {// 需要监控的目录路径std::wstring directory = L"C:\\path\\to\\your\\directory";// 调用监控函数MonitorDirectory(directory);return 0;
}

        但是这个代码本质上是检测存储变化,针对新建文件,修改文件,重命名等都可以检测到,但是单纯的打开文件并不会有任何通知,因此需要更换方法。

        Windows文件系统本身没有提供监控文件打开和关闭操作的方法,因此必须使用更底层的API或驱动程序来实现。常用的两种方式,一种是编写内核过滤驱动的方式,在底层实现监控和拦截。另一种是通过钩子技术,在调用系统API之前执行钩子函数,从而实现监控。其中编写过滤驱动的方式比较复杂,难度较大,如果编的不好还可能导致系统异常。

        下面是一个利用钩子技术实现的例程供参考,用到第三方库EasyHook

#include <easyhook.h>
#include <iostream>
#include <Windows.h>// 定义 NtCreateFile 函数的类型
typedef NTSTATUS(WINAPI* NtCreateFile_t)(PHANDLE FileHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,PLARGE_INTEGER AllocationSize,ULONG FileAttributes,ULONG ShareAccess,ULONG CreateDisposition,ULONG CreateOptions,PVOID EaBuffer,ULONG EaLength
);// 保存原始 NtCreateFile 函数指针
NtCreateFile_t OriginalNtCreateFile = NULL;// 定义我们的钩子函数
NTSTATUS WINAPI HookedNtCreateFile(PHANDLE FileHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,PLARGE_INTEGER AllocationSize,ULONG FileAttributes,ULONG ShareAccess,ULONG CreateDisposition,ULONG CreateOptions,PVOID EaBuffer,ULONG EaLength
) {std::wcout << L"File is being opened: " << ObjectAttributes->ObjectName->Buffer << std::endl;// 调用原始 NtCreateFile 函数return OriginalNtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);
}int main() {// 安装钩子if (LhInstallHook(GetProcAddress(GetModuleHandle(L"ntdll"), "NtCreateFile"),HookedNtCreateFile,NULL,&OriginalNtCreateFile) != 0) {std::cerr << "Failed to install hook." << std::endl;return 1;}// 启用钩子线程ULONG ACLEntries[1] = { 0 };if (LhSetExclusiveACL(ACLEntries, 1, &OriginalNtCreateFile) != 0) {std::cerr << "Failed to enable hook." << std::endl;return 1;}std::cout << "Hook installed, monitoring file open events..." << std::endl;// 进入消息循环while (true) {Sleep(100);}return 0;
}

相关文章:

透明加密技术

透明加密技术&#xff0c;也被称为透明数据加密&#xff08;Transparent Data Encryption, TDE&#xff09;&#xff0c;是一种加密方法&#xff0c;它允许数据在存储时自动加密和解密&#xff0c;而不需要用户进行任何手动操作。透明加密技术主要应用于数据库、文件系统和磁盘…...

深入理解Faiss:高效向量检索的利器

近年来&#xff0c;随着人工智能和机器学习技术的飞速发展&#xff0c;向量检索技术变得越来越重要。无论是在推荐系统、图像搜索还是自然语言处理等领域&#xff0c;向量检索都扮演着至关重要的角色。而在众多向量检索库中&#xff0c;Faiss&#xff08;Facebook AI Similarit…...

RK3576 芯片介绍

RK3576 芯片介绍 RK3576瑞芯微第二代8nm高性能AIOT平台&#xff0c;它集成了独立的6TOPS&#xff08;Tera Operations Per Second&#xff0c;每秒万亿次操作&#xff09;NPU&#xff08;神经网络处理单元&#xff09;&#xff0c;用于处理人工智能相关的任务。此外&#xff0…...

Python模块篇(五)

模块 模块与包模块的导入与使用标准库的常用模块第三方库的安装与使用&#xff08;如&#xff1a;pip工具&#xff09; 模块与包 模块是一个包含 Python 代码的文件&#xff0c;通常以 .py 作为扩展名。一个模块可以包含函数、类、变量&#xff0c;以及可执行的代码段。模块的…...

西安旅游系统--论文pf

TOC springboot383西安旅游系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿…...

分享一个思路,使用插桩技术解决慢查询测试问题

前段时间&#xff0c;我负责测试的系统在生产环境运行出现问题。该系统对于响应时间要求较高&#xff0c;问题发生的时候并发很高&#xff0c;出现大量请求超时&#xff0c;超时请求比例随时间推迟越来越高&#xff0c;最后几乎全部请求都失败。滚动重启了所有进程后&#xff0…...

【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)

个人主页~ 实战项目的实现过程&#xff08;一&#xff09;~ 实战项目的实现过程 二、初步了解各个外设硬件1、OLED模块2、GPS模块3、MPU6050模块4、超声测距模块5、温度测控模块6、语音模块7、SIM模块8、按键模块 三、查阅资料1、查看手册2、查找例程 四、研究硬件功能1、OLED…...

javaer快速入门 goweb框架 gin

gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量&#xff0c;以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…...

SQL - 数据类型

字符串类型 char(10)&#xff0c;存储固定长度字符串 varchar(255)&#xff0c;存储可变长度字符串 mediumtext&#xff0c;中文本&#xff0c;对于存储JSON对象、SCV字符串很好使 longtext&#xff0c;长文本&#xff0c;可以很好地存储教本或许多年地日志文件 tinytext&#…...

进程相关知识

进程和程序的区别 程序 程序是静态的&#xff0c;是存储在硬盘、SSD等存储介质中的一个文件&#xff0c;通常由源代码&#xff08;如 .c 文件&#xff09;编译生成的二进制可执行文件&#xff08;如 a.out&#xff09;。程序包含了指令和数据&#xff0c;但在未被执行时&#…...

萝卜快跑和端到端的自动驾驶(1)

先看一篇论文 2311.18636 (arxiv.org) 这篇论文里有一个非常好的图 比较了一下模块化任务(级联任务)和端到端自动驾驶的区别 首先什么叫模块化任务(级联) 如上图所示&#xff0c;左边的方块中的子方块&#xff0c;是展示了自动驾驶获取数据的途径&#xff0c;这里包括&…...

通信原理学习笔记

一个手机通话需要经过下面三个网络 类别接入网&#xff08;Access Network&#xff09;承载网&#xff08;Transport Network&#xff09;核心网&#xff08;Core Network&#xff09;定义连接终端用户与电信网络的部分。在接入网和核心网之间传输数据的网络。处理、交换和管理…...

系统编程---day4

1. 链接文件 命令行&#xff1a; ln -s 文件名 softlink 1.1 symlink int symlink(const char *oldpath, const char *newpath); 功能:创建一个链接向oldpath文件的新符号链接文件 参数:oldpath:被链接向的文件的路径 newpath:新符号链接文件 返回值:成功返回0,失败返回…...

01:电容的什么,各类电容的优缺点

1.电容是什么&#xff1f; 电容是由两块不连通的导体&#xff0c;已经中间的不导电材料组成 电容结构&#xff1a; 1.2电容的容量计算公式 C ε s d \displaystyle\frac{εs}{d} dεs​ 1.3常见电容的种类 1.4各类电容的特点...

Android+Jacoco+code-diff全量、增量覆盖率生成实战

背景 主要是记录下Android项目使用jacoco生成代码覆盖率的实战流程&#xff0c;目前已完成全量覆盖方案&#xff0c;仅使用jacoco就能实现&#xff1b; 由于我们的Android端是使用Java和kotlin语言,目前增量的方案code-diff仅针对Java代码&#xff0c;卡在kotlin文件的分析&am…...

乌龟对对碰在线版

爆肝两天使用vue开发了一个在线版的乌龟对对碰小游戏之幸运对对碰。没有找到合适的乌龟素材&#xff0c;现在使用小兔子代替。 体验地址&#xff1a;幸运对对碰 | 乌龟对对碰小游戏 之前的python版本的乌龟对对碰&#xff1a;写文章-CSDN博客 乌龟对对碰-幸运对对碰...

如何更改select option边框颜色和选中的颜色

<!doctype html> <html> <head> <meta charset"utf-8"> <title>如何更改select option边框颜色和选中的颜色</title> </head><style>ul{border: 1px solid #000000;width: 500px;height: auto;background-color: aq…...

6. 数据结构—串的匹配算法

1.BF算法(暴力算法) //模式匹配(暴力算法) int Index(SString S,SString T){int i1,j1;while(i<S.length&&j<T.length){if(S[i]T[i]){i;j;}else{ii-j2; //最开始匹配的位置的后一个j1; //从头匹配 }}if(j>T.length)return i-T.length;return return 0…...

九大服务架构性能优化方式

来源&#xff1a;九大服务架构性能优化方式 目录 性能优化九大方式&#xff1a; 缓存 使用什么样的缓存 缓存常见问题 缓存淘汰 缓存数据一致性 并行化处理 批量化处理 数据压缩合并 无锁化 顺序写 分片化 避免请求 池化 异步处理 总结 最近做了一些服务性能优…...

【RabbitMQ】 相关概念 + 工作模式

本文将介绍一些MQ中常见的概念&#xff0c;同时也会简单实现一下RabbitMQ的工作流程。 MQ概念 Message Queue消息队列。是用来存储消息的队列&#xff0c;多用于分布式系统之间的通信。 系统间调用通常有&#xff1a;同步通信和异步通信。MQ就是在异步通信的时候使用的。 同…...

flameshow性能优化技巧:如何快速定位Go程序中的CPU热点

flameshow性能优化技巧&#xff1a;如何快速定位Go程序中的CPU热点 【免费下载链接】flameshow A terminal Flamegraph viewer. 项目地址: https://gitcode.com/gh_mirrors/fl/flameshow &#x1f525; 想要快速定位Go程序中的性能瓶颈吗&#xff1f;flameshow是一个强大…...

Adobe-GenP 3.0:轻松激活Adobe全家桶的完整指南

Adobe-GenP 3.0&#xff1a;轻松激活Adobe全家桶的完整指南 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP 3.0是一款专为Adobe Creative Cloud系列软件…...

Hermes Agent 框架如何对接 Taotoken 作为自定义模型供应商并配置环境变量

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Hermes Agent 框架如何对接 Taotoken 作为自定义模型供应商并配置环境变量 Hermes Agent 是一个流行的 AI 代理开发框架&#xff0…...

从科研图表到商业报表:如何用Matplotlib的legend()提升你的图表专业度?

从科研图表到商业报表&#xff1a;如何用Matplotlib的legend()提升你的图表专业度&#xff1f; 在数据驱动的决策时代&#xff0c;图表不仅是科研论文中的证据载体&#xff0c;更是商业汇报中的说服工具。我曾见证一位生物统计学家将同一组临床试验数据呈现给三种不同受众&…...

机器学习赋能矩方法:破解稀薄气体强非平衡流动模拟难题

1. 项目概述&#xff1a;当矩方法遇见机器学习在计算流体力学领域&#xff0c;模拟稀薄气体动力学和强非平衡流动&#xff0c;一直是个让工程师和科学家们头疼的“硬骨头”。想象一下&#xff0c;你正在设计一架高超音速飞行器&#xff0c;当它以数倍音速在大气层边缘飞行时&am…...

绝了!原来毕业论文还能这样写?2026降AIGC工具推荐合集

还在为查重率爆红、AI痕迹太明显、格式乱成一团而发愁&#xff1f;2026 年的 AI 论文工具早已不只是写文章那么简单&#xff0c;从选题构思到降AIGC率、去AI痕迹、查重优化&#xff0c;全流程智能辅助&#xff0c;帮你把论文写作变得简单高效&#xff0c;告别熬夜改稿的焦虑&am…...

市面上有哪些是真正安全的降AIGC网站(轻松压低AI生成疑似率)

最崩溃的不是查重难题&#xff0c;而是查重达标却AI率超标亮红灯&#xff01;很多工具只会简单同义词替换、浅层改字&#xff0c;根本洗不掉AI专属句式、行文逻辑和高频模板话术&#xff0c;学校AIGC检测一查一个准&#xff0c;论文直接凉凉。 本篇结合全网实测数据&#xff0c…...

每日一书㉗ | 刻意练习:为什么有些人努力一辈子还是平庸?

“本文来自「乐想屋」公众号&#xff0c;系列更新[每日一书]&#xff0c;每次5分钟&#xff0c;帮你把书读薄&#xff0c;把知识用活”先问你一个问题。你身边有没有这样的人&#xff1a;入行时间比你短&#xff0c;但能力已经甩你好几条街。他们好像没有特别刻苦&#xff0c;但…...

Godot4地图分层绘制实战:从图层混乱到专业场景管理的避坑指南

Godot4地图分层绘制实战&#xff1a;从图层混乱到专业场景管理的避坑指南当你第一次在Godot4中完成一个复杂场景的TileMap绘制时&#xff0c;那种成就感无与伦比。但随着场景复杂度提升&#xff0c;你是否遇到过这些头疼问题&#xff1a;角色明明站在树后却被树叶遮挡&#xff…...

Safe Exam Browser 虚拟化检测绕过技术深度实践

Safe Exam Browser 虚拟化检测绕过技术深度实践 【免费下载链接】safe-exam-browser-bypass A VM and display detection bypass for SEB. 项目地址: https://gitcode.com/gh_mirrors/sa/safe-exam-browser-bypass 在现代教育技术领域&#xff0c;Safe Exam Browser&…...