Enterprise Library 2.0 Hands On Lab 翻译(3):数据访问程序块(三)

练习3:加密数据库连接信息

通过该练习,你将学会如何去加密数据库连接信息。

 

第一步

打开DataEx3.sln项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Data Access\exercises\ex03\begin,并编译。

 

第二步 加密数据库连接字符串

1.在Enterprise Library1.1中加密连接字符串,需要依赖于Cryptography Application Block.NET Framework2.0中已经内置了这项功能,通过Configuration命名空间下的一些类来完成,支持两种类型的加密:

DPAPIProtectedConfigurationProvider:使用Windows Data Protection API (DPAPI)

RsaProtectedConfigurationProvider:使用RSA算法

2.选择ProductMaintenance项目,选择Project | Add Reference …菜单命令,在弹出的对话框中选择.NET页并添加如下程序集。

System.Configuration.dll

3.在解决方案管理器中选择Program.cs文件,选择View | Code菜单命令,加入如下命名空间。

None.gifusing System.Configuration;

4.在方法ProtectConfiguration中添加如下代码。

None.gifstatic void ProtectConfiguration()
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif
InBlock.gif    
// TODO: Protect the Connection Strings
InBlock.gif

InBlock.gif    
string provider = "RsaProtectedConfigurationProvider";
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    Configuration config 
= null;
InBlock.gif
InBlock.gif    config 
= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    ConfigurationSection section 
= config.ConnectionStrings;
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    
if ((section.SectionInformation.IsProtected == false&&
InBlock.gif
InBlock.gif        (section.ElementInformation.IsLocked 
== false))
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
InBlock.gif        
// Protect (encrypt) the "connectionStrings" section.
InBlock.gif

InBlock.gif        section.SectionInformation.ProtectSection(provider);
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        
// Save the encrypted section.
InBlock.gif

InBlock.gif        section.SectionInformation.ForceSave 
= true;
InBlock.gif
InBlock.gif        config.Save(ConfigurationSaveMode.Full);
InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif

 

第三步 运行应用程序

选择Debug | Start Without Debugging菜单命令并运行应用程序,注意该示例和练习2中的示例是一样的。在项目bin\Debug目录中打开ProductMaintenance.exe.config配置文件,注意到连接信息已经变成了密文。

None.gif<?xml version="1.0" encoding="utf-8"?>
None.gif
None.gif
<configuration>
None.gif
None.gif  
<configSections>
None.gif
None.gif    
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
None.gif
None.gif  
</configSections>
None.gif
None.gif  
<dataConfiguration defaultDatabase="QuickStarts Instance" />
None.gif
None.gif  
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
None.gif
None.gif    
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
None.gif
None.gif      xmlns
="http://www.w3.org/2001/04/xmlenc#">
None.gif
None.gif      
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
None.gif
None.gif      
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
None.gif
None.gif        
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
None.gif
None.gif          
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
None.gif
None.gif          
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
None.gif
None.gif            
<KeyName>Rsa Key</KeyName>
None.gif
None.gif          
</KeyInfo>
None.gif
None.gif          
<CipherData>
None.gif
None.gif            
<CipherValue>xeuEp2HB0xd87DFM0p5UwO78QjRW6A/pb6kGJpS5Rl0F0jHAEPh8wz4Jroc1+/I7nvmsCo6a8wzju4Nyd5ZGF6KRZgx56P9wRgkUFtJPgDROrz1ASRSIrOfMjw4+1uedT+pl+IuF1EWgEH9Vb+/8A9xmbYWtMBAcR/f/quSC1nQ=</CipherValue>
None.gif
None.gif          
</CipherData>
None.gif
None.gif        
</EncryptedKey>
None.gif
None.gif      
</KeyInfo>
None.gif
None.gif      
<CipherData>
None.gif
None.gif        
<CipherValue>DrwCnj8uCmkWOjLc2waTGX2pf8QKRFpegQbFv0zcVAwcCkZRvUVnIj9kXCLiIx+Pcbrz6H/fccbWxybAA+V7A4unJvDXegyZR1+dW7UqfDOAagTW67FC6iI3vatOpGCw30W+xpwhfgptCoFRNiCMWqxvpv++pywSK5SNfB7UZwpl90Q9dBHmmCIVyi/ZbS5JY2FLN68nRd9CHZmZLHv9opBm4DvMVdAXt7oKQ6tk9k4HJZzpUc1V8pWLQn7NQroA/4WpUDGGgk1gJ2HTBkP2L6wATzxTfQDgZbW/JIgrdollAQbO3/UEAvAnc0swoL/6BhWS5MW/9PxjuQK6GhsnSr4Dg7SEdsFPO2bTsAP/lAUeY5y9M3UxC1Q32IwMt8O4gz5ppNgYY7R8yKmvH7/S80/i61qJXvSJEQ/hQjx8V2R9okuBaN4XVgLUysmFWsOwxxHiGFyuSOECDWnr1c/5XwM7O85gVTzMELdM+N1jVFQTADXQmckOY1nZllRd3cA9CB1Qruqn/RxbGOFHT1F6y/4Cbfk7x1CKsmHx0iI0WNJ5iD3KYEq5kosGwWxrOI8C28BiXfEztwCzruSP6JpMbw==</CipherValue>
None.gif
None.gif      
</CipherData>
None.gif
None.gif    
</EncryptedData>
None.gif
None.gif  
</connectionStrings>
None.gif
None.gif
</configuration>


注意根据Hands On Lab给出的时间建议,做完以上三个练习的时间应该为30分钟。

更多Enterprise Library的文章请参考《Enterprise Library系列文章

转载于:https://www.cnblogs.com/Terrylee/archive/2006/10/06/Data_Access_Application_Block_HandsOnLab_Part3.html

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

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

相关文章

操作系统进程学习(Linux 内核学习笔记)

操作系统进程学习(Linux 内核学习笔记) 进程优先级 并非所有进程都具有相同的重要性。除了大多数我们所熟悉的进程优先级之外&#xff0c;进程还有不同的关键度类别&#xff0c;以满足不同需求。首先进程比较粗糙的划分&#xff0c;进程可以分为实时进程 和非实时进程&#x…

【Linux内核】虚拟地址空间布局架构

虚拟地址空间布局架构(Linux内核学习) 1.Linux内核整体架构及子系统 内核对下管理硬件,对上通过运行时库对应用提供服务 用户空间 使用malloc()分配内存通过free()释放内存 内核空间 虚拟进程负责从进程的虚拟地址空间分配虚拟页,sys_brk来扩大或收缩堆,sys_mmap负责在内存映…

【Linux内核】内存映射原理

【Linux内核】内存映射原理 物理地址空间 物理地址是处理器在总线上能看到的地址,使用RISC(Reduced Instruction Set Computing精简指令集)的处理器通常只实现一个物理地址空间,外围设备和物理内存使用统一的物理空间, 有些架构的处理器把分配给外围设备的物理地址称为设备内存…

javascript学习系列(1):数组中的map方法

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 1前言 在我们的日常开发中 不免会有很多需要处理数据的方法 本节主要说一说m…

【Linux内核】物理内存组织结构

【Linux内核】物理内存组织结构 系统调用mmap 物理内存组织结构 体系结构 目前多处理器系统有两种体系结构&#xff1a; 1&#xff09;非一致内存访问&#xff08;Non-Unit Memory Access&#xff0c;NUMA&#xff09;&#xff1a;指内存被划分成多个 内存节点的多处理器系…

脱离 Rails 看 Ruby

在开始这篇文章之前&#xff0c;我需要澄清一些事情。首先&#xff0c;这不是一篇关于 Ruby on Rails 的文章。如果您希望了解 Rails&#xff0c;每周&#xff08;甚至每小时&#xff09;都有相关的文章和 blog 出现&#xff0c;它们都对这个令人兴奋的框架的众多特性大加推崇&…

如何方便的让你的集合引发改变事件

在我们开发自定义控件的过程中,我们常常会给控件添加集合属性。比如定制Grid控件就会有Column集合。当集合属性发生变化时&#xff0c;比如添加新元素&#xff0c;删除新元素&#xff0c;我们要通知控件去重绘以反映新的变化。我们可以创建一个集合类&#xff0c;在类里添加一个…

[汇编语言]-第八章 div指令,伪指令dd,dup

1- div除法指令 (1) 除数: 有8位和16位两种,在一个寄存器或内存单元中. (2) 被除数: 默认放在AX和DX或AX中 除数为8位, 被除数为16位, 默认在AX中存放. 除数为16位, 被除数为32位, 在DX或AX中存放. AX存放低16位,DX存放高16位. (3) 结果 除数为8位, 则AL存储除法操作的商, AH存…

lambda表达式浅析【C++学习笔记】

lambda表达式浅析【C学习笔记】 基本用法: auto f [/*捕获列表*/](/*参数*/)->int /*后置返回值类型*/{/** 函数体*/};捕获列表: [] : 不捕获任何变量 [变量名] : 表示值捕获,不可修改 [] :按值捕获所有变量,不可修改 [&] : 按引用捕获可以修改 [this] : 在类中捕…

【Cocos2d-x for WP8 学习整理】(2)Cocos2d-Html5 游戏 《Fruit Attack》 WP8移植版 开源...

【Cocos2d-x for WP8 学习整理】&#xff08;2&#xff09;Cocos2d-Html5 游戏 《Fruit Attack》 WP8移植版 开源 原文:【Cocos2d-x for WP8 学习整理】&#xff08;2&#xff09;Cocos2d-Html5 游戏 《Fruit Attack》 WP8移植版 开源这一阵花了些时间&#xff0c;把 cocos2d-h…

碰撞,处理碰撞,发射 Learn Unreal Engine (with C++)

本文使用打砖块游戏举例 碰撞,处理碰撞 碰撞就相当于一个Actor进入另一个Box中,用这个思路就可以处理碰撞了 OnComponentBeginOverlap 当某些内容开始重叠此组件时调用的事件&#xff0c;例如玩家进入触发器。 **委托 事件 **1 AddDynamic( UserObject, FuncName ) 用于…

传送,条件加速 Learn Unreal Engine (with C++)

本文以吃豆人游戏为例UE4项目: 自制UE4 小游戏 (gitee.com) 传送 pawn进入box触发OnActorBeginOverlap获取目标位置,下一帧将pawn坐标更改为目标位置 首先需要重叠函数与开始重叠事件绑定 OnActorBeginOverlap.AddDynamic(this, &ATeleporterActor::OnOverlapBegin);头文件…

获取摄像机,摄像机切换Learn Unreal Engine (with C++)

摄像机应该是使用最普遍的组件了 获取摄像机,摄像机切换 新建C类(以CameraActor为父类) 将摄像机在地图中放置 头文件声明 virtual void BeginPlay() override;UPROPERTY(EditAnywhere, BlueprintReadWrite)UBoxComponent* OverlapVolume; // 盒体组件,用于检测人物碰撞UPR…

android报错及解决1--Bitmap加载时,报bitmap size exceeds VM budget

报错描述&#xff1a; 用Bitmap加载图片资源时&#xff0c;报错java.lang.OutOfMemoryError: bitmap size exceeds VM budget 原因分析&#xff1a; android系统限制&#xff0c;只给图片分配8M内存&#xff0c;超过就蹦。图片虽然几十K&#xff0c;可能是压缩格式&#xff0c;…

主角的创建与选择 Learn Unreal Engine (with C++)

主角创建有两种方式,本教程以SpaceshipBattle fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 1. 新建游戏模式方式 新建一个蓝图类,选择游戏模式基础 在蓝图类的细节中将默认pawn类选择主角的蓝图类 在项目设置->地图和模式->默认模式->默认游戏模式 默认游…