0

0

如何用C#实现数据库的加密列?透明数据加密TDE?

畫卷琴夢

畫卷琴夢

发布时间:2025-10-15 17:23:01

|

924人浏览过

|

来源于php中文网

原创

列级加密由C#应用通过AES实现,加密敏感字段如手机号,需在存取时加解密,密钥应安全存储;透明数据加密(TDE)在数据库层加密整个数据库文件,通过SQL Server或Azure配置,无需修改C#代码,防物理攻击。1. 列级加密:应用层控制,细粒度,适合高敏感数据;2. TDE:数据库级透明加密,保护数据文件和备份,不改变应用逻辑。两者可结合使用。

如何用c#实现数据库的加密列?透明数据加密tde?

在C#中实现数据库加密列或使用透明数据加密(TDE),需要区分两种不同的加密层级:一种是应用层的列级加密,另一种是数据库层面的TDE。它们的目标和实现方式不同。

1. 列级加密(应用层加密)

如果你希望在C#应用中对特定的数据列进行加密(例如身份证号、手机号等),可以在写入数据库前加密,读取时解密。这种方式由应用程序控制加密逻辑。

示例:使用AES加密敏感列

步骤:

  • 定义一个加密帮助类,使用AES算法对字符串加密
  • 在保存到数据库前调用加密方法
  • 从数据库读取后调用解密方法

AES加密工具类示例:

public class AesEncryptionHelper { private static readonly byte[] Key = { /* 32字节密钥 */ }; // 应安全存储 private static readonly byte[] IV = { /* 16字节IV */ }; // 初始化向量
public static string Encrypt(string plainText)  
{  
    using (var aes = Aes.Create())  
    {  
        aes.Key = Key;  
        aes.IV = IV;  

        var encryptor = aes.CreateEncryptor(aes.Key, aes.IV);  
        using (var ms = new MemoryStream())  
        {  
            using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))  
            {  
                using (var sw = new StreamWriter(cs))  
                    sw.Write(plainText);  
            }  
            return Convert.ToBase64String(ms.ToArray());  
        }  
    }  
}  

public static string Decrypt(string encryptedText)  
{  
    using (var aes = Aes.Create())  
    {  
        aes.Key = Key;  
        aes.IV = IV;  

        var decryptor = aes.CreateDecryptor(aes.Key, aes.IV);  
        using (var ms = new MemoryStream(Convert.FromBase64String(encryptedText)))  
        {  
            using (var cs = CryptoStream(ms, decryptor, CryptoStreamMode.Read))  
            {  
                using (var sr = new StreamReader(cs))  
                    return sr.ReadToEnd();  
            }  
        }  
    }  
}  

}

使用场景:

// 保存用户信息前加密 string encryptedPhone = AesEncryptionHelper.Encrypt("13800138000"); // 插入数据库 command.Parameters.AddWithValue("@Phone", encryptedPhone);

// 查询时解密
string decryptedPhone = AesEncryptionHelper.Decrypt(reader["Phone"].ToString());

注意:密钥管理很关键,不要硬编码在代码中,建议使用Azure Key Vault、环境变量或配置服务保护密钥。

2. 透明数据加密(TDE, Transparent Data Encryption)

TDE 是数据库引擎级别的加密功能,用于加密整个数据库的数据文件(.mdf)、日志文件(.ldf)和备份文件,防止未经授权的物理访问。

TDE 不是由C#代码直接实现的,而是通过SQL Server或Azure SQL配置的。C#应用无需修改代码即可透明使用。

狼群淘客 免费开源淘宝客程序
狼群淘客 免费开源淘宝客程序

狼群淘客系统基于canphp框架进行开发,MVC结构、数据库碎片式缓存机制,使网站支持更大的负载量,结合淘宝开放平台API实现的一个淘宝客购物导航系统采用php+mysql实现,任何人都可以免费下载使用 。狼群淘客的任何代码都是不加密的,你不用担心会有任何写死的PID,不用担心你的劳动成果被窃取。

下载

启用TDE的步骤(以SQL Server为例):

  • 创建数据库主密钥(DMK)
  • 创建证书用于加密
  • 创建数据库加密密钥(DEK)
  • 启用TDE

USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPassword123!';

CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My Database Encryption Certificate';

USE YourDatabase;
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;

ALTER DATABASE YourDatabase SET ENCRYPTION ON;

启用后,数据库所有页在写入磁盘前自动加密,读取时自动解密。备份文件也自动加密。

Azure SQL中的TDE

Azure SQL默认支持TDE,在门户中可一键开启,并支持使用客户管理密钥(CMK)与Azure Key Vault集成。

对比总结

列级加密(C#实现)

  • 加密粒度细,仅加密敏感字段
  • 应用层控制,需修改代码
  • 数据库中内容为密文,支持模糊查询困难
  • 适合高敏感字段如身份证、银行卡

TDE(数据库层)

  • 加密整个数据库文件
  • 无需修改C#代码,完全透明
  • 不保护数据在应用中的明文显示
  • 防物理攻击、备份泄露

基本上就这些。根据安全需求选择合适方案,有时两者结合使用更佳。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

682

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

347

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

676

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

575

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

417

2024.04.29

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

3

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7万人学习

C 教程
C 教程

共75课时 | 4.1万人学习

C++教程
C++教程

共115课时 | 12.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号