Entity Framework connectionstring 怎么加密=解密
方式很多,比如,有的人喜欢把连接字符串存储到自己的DLL中。有的喜欢用IIS加密这一节,有的喜欢存储到注册表里。问题都不大,你可以看看MSDN,了解一下连接字符串的处理。
一、如何对Web.config中数据库连接字符串进行加解密,避免明文方式。 1)概述:
Web.Config 中可以存储数据库连接语句,通常存于 配置节中,程序调用非常方便,但是在系统的应用过程中,利用明文存储这些敏感信息是不安全的,这就需要对配置信息进行加密,加密后即使攻击者获取了对配置文件的访问,也可以使攻击者难以获取对敏感信息的访问,从而改进应用程序的安全性。
使用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe) 加密或解密 Web 配置文件的各节。而在在处理 Web.config 文件时,ASP.NET 将自动解密已加密的配置元素。
要加密配置文件的内容, 通过Aspnet_regiis.exe 工具与 –pe 选项以及要加密的配置元素的名称一起使用,利用.NET Framework 提供的2种受保护配置程序来实现节点加解密:
名为DataProtectionConfigurationProvider的 DPAPIProtectedConfigurationProvider 实例使用 Windows 数据保护 API (DPAPI) 对数据进行加密和解密。
名为RsaProtectedConfigurationProvider的 RsaProtectedConfigurationProvider 实例使用 RSA 加密算法对数据进行加密和解密。该提供程序配置为默认提供程序
下面就这2中加密方式,分别进行举例如下:
2)使用DPAPIProtectedConfigurationProvider 来加解密配置节
利用aspnet_regiis -pef connectionStrings 对web.config 加密 在服务器命令提示符下,输入如下命令:
C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pef connectionStrings D:\程序\某系统\EpointBid_HuiYuan –prov DataProtectionConfigurationProvider 正在加密配置节„ 成功!
-pef 指定两个参数:
这里 connectionStrings 是要进行加密的配置节,后面是具体的程序路径 这里 D:\程序\某系统\EpointBid_HuiYuan 是要加密的配置文件所在的物理目录。
-prov 表示使用哪个驱动来加密,一共有两个驱动可选,在类似于
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 的位置,我们可以找到 machine.config 文件,在其 configProtectedData 配置节,我们可以看到这两个驱动的名称,以及默认的驱动是哪一个。这两个驱动是 RsaProtectedConfigurationProvider(类名 RsaProtectedConfigurationProvider,详细操作见下说明示例)和
DataProtectionConfigurationProvider(类名 DpapiProtectedConfigurationProvider)。
如果不加驱动选项,则采用默认驱动进行加密。
者数据库发生变更,那么我们就不得不修改源程序并重新将其编译。更好的解决方法是将数据库连接字符串写入到web.config配置文件中,可问题是将连
接字符串写入到web.config文件中之后,任何人都能打开看到所连接的数据库名和密码,又会带来安全隐患,因此为了保证数据库的安全性,我们可以通
过使用微软IDE自带的命令aspnet_regiis.exe将配置文件web.config中指定的标签进行加密,如果以后想查看加密后的连接字符
串,我们还可以使用aspnet_regiis.exe将加密后的字符串进行解密。
1. 加密通用语法
加密一个特定网站的web.config文件的通用形式
aspnet_regiis.exe -pef secion physical_directory -prov provider
或
aspnet_regiis.exe -pe secion -app virtual_directory -prov provider
其中,各个参数的含义如下:
section表示要加密的配置节
physical_directory用于指定站点的物理路径。
virtual_directory用户指定虚拟路径。
provider指定加密提供程序。
加密一个特定站点的连接字符串就是:
aspnet_regiis.exe -pef "connectionStrings" "你的web项目路径" -prov "DataProtectionConfigurationProvider"
其中DataProctionConfiguartionProvider是Windows数据保护API(DPAPI)提供程序,它使用Windows内置的密码学技术来加解密配置节。默认情况下,这个提供程序使用本机的密钥。
2. 加密方法
运行Visual Studio 2008命令提示
加密后的结果
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData> <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAy1WyvzomB0WAlqYo+ogiigQAAAACAAAAAAADZgAAqAAAABAAAADbDjp+bAce//lsg/so66+8AAAAAASAAACgAAAAEAAAANlF3b73Kdupv/cAf4a9nPUwAQAAoTvrHdAjNjaJFEfiG7pD6sG8GMNJKGpnd4JLchu7W9XhOuPgG4C/LD9H9WQ9uF3t/0MoMI9tbrWdFJ1Yu5/e3PAV4RCbCvDlPD0VC7hxtDMqfRjQ+1OhTdk2woiSNpx0TzXwZE25o4vlXq/aYri1Wmlo2zyRqSkg0hQFQbObCf7lrgWEUjsv+pEOS5OVXcgNhFipVMy5iQ8sH5fNHmGg8gu5JlZQaOqYFG8ci7MGOebcQzR67krJXRBrs26lZtAj8lzf2bK+QcSqtU7Rt4C33JbLqisPL9xhfoUl9GvGTu5VS1S1H5VtErTeYXxnL7PTIr3cNjIbDMjI48LJfoOgtymT35KUdK3J0DxB68DqPaeK5QSEC/L0+6bizStRZ7BDnOngV/XfiVJnbSNYXX5IShQAAACuGn8QGUuQ4TOzkKcc891SV/CVDQ==</CipherValue>
</CipherData>
</EncryptedData>
lt;/connectionStrings>
3. 解密
解密该连接字符串也很简单
aspnet_regiis.exe -pdf "connectionStrings" '你的web项目路径"
解密后的结果:
<connectionStrings>
<add name="Sql" connectionString="Data Source=.;Initial Catalog=MySchool;Integrated Security=True" />
</connectionStrings>
4. 后台代码读取配置文件web.config中数据库连接字符串的方法:
using System.Configuation;
…
protected void Page_Load(object sender, EventArgs e)
{
lblMessage.Text = ConfigurationManager.ConnectionStrings["Sql"].ToString();
}
…
5. 在连接字符串的加密和解密的过程中,需要注意一下几点。
使用加密的连接字符串
使用加密的连接字符串不需要编码解密,ASP.NET会自动对加密内容进行解密。
加密和解密在同一台计算机上使用
在加密过程中,使用了一个基于本机的密钥。这就意味着加密和解密必须在同一台计算机上进行,否则将不能解密。同时,在一台计算机上加密的配置,在另一台计算机上将不能正常使用。
中文路径问题
该命令对中文支持不是很好。如果站点的路径中有中文字符,也许不能正常加解密。
耿虞品川: Entity Framework主要是把关系型数据库也就是Sqlserver那些转化一下,让程序员在写C#的代码的时候,能用类的方式来操作数据库,而不是用sql字符串.我们可以把它用用C/S的工程当中,也可以把它用到 B/S的工程当中.为了展示EntityFramework的使用方法,我们首先得建立一个例子解决方案.这个解决方案的最基础的普通三层结构,因为数据的访问主要靠EntityFramework来实现,所以数据访问层的实现基本看不出来了,使得整个解决方案好像就是个两层的一样.
屯溪区14771769905: Entity Framework是什么,我电脑上安装了.net4.0了,还需要装Entity Framework吗? - ?
耿虞品川: 看样子你不是搞数据库编程的,不需要装.Entity Framework主要是把关系型数据库也就是Sqlserver那些转化一下,让程序员在写C#的代码的时候,能用类的方式来操作数据库,而不是用sql字符串.
屯溪区14771769905: 如何正确地使用Entity Framework Database First - ?
耿虞品川: 转载 今天遇到的问题就是在建立数据模型时遇到的.因为项目是基于数据库构建的,所以理所应当地采用DB First来构造实体类和DbContext类.于是想也没想就直接在项目上右键->添加->新建项->ADO.NET 实体数据模型.然后一路“下一步”...
屯溪区14771769905: entity framework怎么用 - ?
耿虞品川: 今天刚接触Entity Framework,确实在简单使用非常方便我现在有一个需求 将对象的公共字段 如 id createDate 等 提取出来作为BaseEntity 在xxxModelFirst.Designer.cs 的model对象继承这个BaseEntitypublic partial class BaseEntity : ...
屯溪区14771769905: Entity Framework和NHibernate的区别是什么? - ?
耿虞品川: 都是ORM编程,区别赞NHibernate 是从 Java的Hibernate照搬过来的,而且Entity Framework是微软自行开发,结合了NHibernate中的优点及Linq的强大优势.Entity Framework 4.1已经进行了非常大的改善,4.3更是在性能上做了大的改过.5.0beta版也已经发布.可以看得出来微软对Entity Framework 的重视.中型项目用Entity Framework还是很不错的选择,但也要结合使用sql ,存储过程,因为有些复杂业务用Linq to entity来实现比较麻烦,这时候就中以利用sql的轻便来实现.所以要相辅相成的使用.
屯溪区14771769905: Entity Framework于ADO.Net相比有什么优势? - ?
耿虞品川: 就目前而言,使用EntityFramework还不如使用NHibernate Entity Framework的优势就是拥有更好的LINQ提供程序、文档,并且是由微软所支持的.但NHibernate具有大量Entity Framework 4.0所不具备的特性,像批量读/写、“额外的”延迟、集合过滤器、调整等等.ORM工具的普遍开发速度快 但个人基本不用这些ORM工具,对于一个要求高性能、高可靠性、高并发,分布式的web应用程序,自己写ADO.NET最起码能保证数据访问可控.
屯溪区14771769905: Entity Framework执行SQL怎么要多一个参数 - ?
耿虞品川: 类似这样:return dbContext.Database.sqlQuery("getCount {0}", userid).FirstOrDefault(); SqlQuery("SQL{0},{1}",参数1,参数2,...)
屯溪区14771769905: Entity - Framework 怎么样好用吗?请用过的人谈谈! - ?
耿虞品川: 比较好用,重要的是MS还在维护EntityFramework,最新的4.2也解决了不少问题,特别是CodeFirst的模式,解决了微软ORM之前依靠配置文件过重的问题
屯溪区14771769905: vs2012怎么安装 entityframework - ?
耿虞品川: 步骤如下:工具- 库程序包管理器 - 程序包管理控制台1.从NuGet 卸载 ef 6.12.修改原语句 Install-Package–VersionInstall-Package EntityFramework –Version 5.0.0从NuGet管理器中就可以查看 或者在 packages.config 中查看知道就直接填上去 不知道 就需要到官网查 总共出了多少版本 选择自己适用的 最后更新下 匹配的中文语言包
屯溪区14771769905: 如何 学习 entity framework - ?
耿虞品川:转载 1 前一段时间园子里有很多文章介绍分析了Linq To SQL,它可以说是一个简单实现的ORM,是微软针对数据和对象的阻抗不平衡的问题.C# 3.0推出一些新的特性,比如Extension M...