建设部网站资质人员查询网站建设案例信息

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

建设部网站资质人员查询,网站建设案例信息,深圳注册公司的基本流程,电子商务是什么意思透明加密技术#xff0c;也被称为透明数据加密#xff08;Transparent Data Encryption, TDE#xff09;#xff0c;是一种加密方法#xff0c;它允许数据在存储时自动加密和解密#xff0c;而不需要用户进行任何手动操作。透明加密技术主要应用于数据库、文件系统和磁盘…透明加密技术也被称为透明数据加密Transparent Data Encryption, TDE是一种加密方法它允许数据在存储时自动加密和解密而不需要用户进行任何手动操作。透明加密技术主要应用于数据库、文件系统和磁盘加密以确保静态数据的安全性。 关键特性 透明性对应用程序和用户是透明的应用程序不需要做任何改变用户也不需要手动加密或解密数据。 实时加密和解密数据在写入存储时自动加密在读取时自动解密这一过程是即时的不会对性能造成明显影响。 密钥管理通常使用专门的密钥管理系统KMS来管理加密密钥。密钥的安全性对整体系统至关重要。 数据完整性保护除了加密透明加密技术通常还会提供数据完整性保护防止数据被篡改。
常见应用场景 数据库许多数据库系统如Oracle、SQL Server、MySQL等都提供了透明数据加密功能用于保护存储在数据库中的敏感数据。文件系统一些操作系统提供透明加密功能可以保护磁盘上的文件和文件夹。云存储许多云服务提供商如AWS、Azure也采用透明加密技术来保护云端存储的数据。 优点 易用性对用户和应用程序透明无需对现有系统进行大规模修改。安全性自动保护静态数据防止数据泄露。合规性帮助企业满足数据保护法规的要求如GDPR、HIPAA等。 潜在挑战 密钥管理密钥的安全存储和管理至关重要如果密钥泄露加密的数据也会变得不安全。性能影响虽然通常性能影响较小但在高性能应用中透明加密可能带来一定的性能开销。 透明加密技术通过自动化和透明化的方式提供了强大的数据保护能力广泛应用于需要保护敏感信息的各种场景中。 一个典型的应用就是企业内部的数据加密。在公司内网里安装了加密服务的电脑可以正常打开各类文件但是如果将数据拷贝出来在另一台没装加密服务的电脑或脱离内网连接的电脑上打开则文件内容显示均为乱码可以有效的保障企业数据安全。 接下来简单介绍下原理。 假设我们现在要做一款这样的软件为了简单不考虑联网只在本地运行即运行了加密软件就可以正常读写文件但这些文件放到别的没有加密软件的电脑则显示乱码。 首先我们得先确定用什么加密算法由于我们还需要解密还原所以必须使用可逆的加密算法这样加密后才能解密还原常用的AES就可以。 从操作方式上来说我们希望文件拷贝出去后是加密的乱码那么常态情况下文件肯定是被加密了的。在安装了加密软件的电脑上可以正常显示说明在打开的一瞬间加密软件进行了解密操作。也就是说在硬盘上的文件都是加密的但是读到内存中的数据是解密的。 由于用户操作的随机性必须要有一种监测手段能够知道用户操作了哪些文件修改了什么这样只针对这一个具体的文件做加解密操作以现代电脑的速度执行起来是很快的基本可以做到用户无感。 基本确定软件逻辑了首先软件启动后会监控硬盘路径下的文件操作如果是文件打开则执行解密程序使得可以正常显示当用户进行编辑时不做任何处理一旦用户执行保存操作则执行加密程序将数据写入存储。 所以有个核心功能就是监测文件操作在Windows下监控文件的修改还是比较简单的下面是一段示例代码。 #include windows.h #include iostream #include stringvoid 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 LFile created: fileName std::endl;break;case FILE_ACTION_REMOVED:std::wcout LFile deleted: fileName std::endl;break;case FILE_ACTION_MODIFIED:std::wcout LFile modified: fileName std::endl;break;case FILE_ACTION_RENAMED_OLD_NAME:std::wcout LFile renamed (old name): fileName std::endl;break;case FILE_ACTION_RENAMED_NEW_NAME:std::wcout LFile renamed (new name): fileName std::endl;break;default:std::wcout LUnknown 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 LC:\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 LFile 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(Lntdll), 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; }