一、遇到的问题:

关于密码体系的初步知识

解决方法:

1对称加密算法

在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。最初的原理包括字母的换位、替换。

2不对称加密算法

不对称加密算法有RSA算法和美国国家标准局提出的DSA。

公开密钥密码体制的基本思想:

加密和解密密钥不同。在算法公开的情况下,在计算上不可能由加密密钥求解出解密密钥,因此加密密钥可以公开,解密密钥由接收方私有保存。即使是加密的一方,也不可能解密。

公开密钥密码体制的简单使用流程:

A、B两人通信,A欲发消息给B,则利用B的公开密钥加密数据,B获得加密数据后用自己的私有密钥解密,反之类似。

防止否认的作法是:A、B两人通信,A欲发消息给B,则利用B的公开密钥加密数据,同时,在数据中附带信息,该信息用A自己的私有密钥加密,B获得后用A的公开密钥解密(只能用A的公开密钥才能解)出正确的附带信息,则证明消息来自A。这即“电子签名”的简单原理,当然,实际要比这复杂得多。

RSA的简单示例:

RSA算法的数学基础是大整数分解的困难性。用到数论中的欧拉函数和欧拉定理。

欧拉函数φ(n)的性质:

1、如果p是素数,则φ(p)=p-1

2、如果p是素数,k>=1,则φ(pk)=pk (p-1)

3、对于整数n>=2,n=p1e1p2e2 ……pkek,则φ(n)=n(1-1/p1 ) (1-1/p2 )……(1-1/pk )

4、若m1与m2互素,则φ(m1m2 )= φ(m1) (m2)

一、密钥生成

随机选取两个大素数(例如200为十进制数)p和q;

令n=pq,则φ(n)=(p-1)(q-1)

选择一个与φ(n)互素的数e,即gcd{φ(n),e}=1

由e求出d,满足de º 1modφ(n)

e和n作为加密密钥(公开密钥)

d和n作为解密密钥(私有密钥)

二、对消息M进行分组

将明文M按bit串分组,分组长度L要保证    2L<=n,即L<=log2n。若用m表示分组后的消息的十进制表示,则0≤m<n 。将明文分组为m1 m2 … mr

三、加密

执行运算ci=E(mi)=miemod n (i是下标,e是指数)

四、解密

执行运算mi=D(ci)=cidmod n (i是下标,d是指数),合并分组

示例:

1、随机选取两个素数p=5和q=11;

令n=55,则φ(n)=4*10=40

选择一个与φ(n)互素的数e=3,即gcd{40,3}=1

由e求出d,满足3*d º 1mod40

d=27

(数比较大时,用扩展欧几里德算法求)

e=3和n=55作为加密密钥(公开密钥)

d=27和n=55作为解密密钥(私有密钥)

2、分组

空格:00

A:01  B:02  C:03……Z:26

假设:明文为HI ——>  08 09

3、加密

c1=(08)3mod 55=17

c2=(09)3mod 55=14

4、解密

m1=(17)27mod 55=08

m2=(14)27mod 55=09

可逆变换的证明,看不懂,略

关于扩展欧几里德算法、辗转相除求gcd:

Gcd{a,b}:

A=b*q1+r1

B=r1*q2+r2

R1=r2*q3+r3

……

Rn-2=Rn-1Qn+Rn

Rn-1=RnQn+1+Rn+1                   (n+1为下标)

当Rn+1为0时,则Rn= Gcd{a,b}。

随机选取两个素数p=43和q=59;

令n=2537,则φ(n)=4*10=2436

选择一个与φ(n)互素的数e=13,即gcd{2436,13}=1

由e求出d,满足13*d º 1mod2436,d=?

(2436,13)=1

2436=13*187+5

13= 5 *2+3

5= 1 *3 +2

3= 1 *2 +1

逆向替换:

1=3-1 *2=3-1 *(5-1 *3) =2 *3-1 *5……=937 *13-5*2436

所以,d=937

公开密钥密码体制的优点:

1、密钥分发简单。避免加密密钥的保密问题。

2、秘密保存的密钥量减少。网络中的通信方只要保存好自己的私有密钥

3不可逆加密算法

不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文。这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。如广泛应用在计算机系统中的口令加密,利用的就是不可逆加密算法。

.net中常用到的MD5算法即为不可逆加密算法,及由美国国家标准局建议的不可逆加密标准SHS(Secure Hash Standard:安全杂乱信息标准)等。

二、遇到的问题:

关于微软的Application Library的简单使用

解决方法:

新建一个工程

打开Enterprise Library Configuration----File----open application 打开你创建的web项目的web.config文件

左侧窗口的Application上右击----New----Data Access Application Block

主要配置Sql Connection String ,其中Integrated Security指是否使用集成身份验证,如果填false的话,则必须为连接字串配置用户名和密码,方法是:

Sql Connection String 右击,New……

配置完了以后,将在你的工程目录下产生一个文件:dataconfiguration.config

类似的,你还可以添加其他的配置,例如:Exception Handle

使用时,在添加对“Configuration”、“Data”的引用,在.cs文件中添加using:

using Microsoft.Practices.EnterpriseLibrary.Data;

using Microsoft.Practices.EnterpriseLibrary.Configuration;

使用示例:

Database db=DatabaseFactory.CreateDatabase();

string strSQL="select employeeid,firstname,lastname from employees";

DBCommandWrapper cmd=db.GetSqlStringCommandWrapper(strSQL);

DataSet ds=new DataSet();

db.LoadDataSet(cmd,ds,"emp");

if(!IsPostBack)

{

this.DataGrid1.DataSource =ds;

this.DataGrid1.DataBind();

}

三、遇到的问题:

关于微软的Application Library使用中出现的异常,“异常详细信息: System.Security.SecurityException: 不允许所请求的注册表访问权。”

解决方法:

原因:网上的解释是:企业库的公共项目中:Instrumentation 目录下有操作日志、性能的代码。而这些代码需要一定的权限才可以执行。

在Enterprise Library的FAQs中可以找到答案,有三种解决办法:

1. 运行安装Enterprise Library时安装的“InstallServices.bat”批处理文件。

2. 运行.NET的installutil程序设置(上面的脚本也是使用installutil命令)。

3. 去掉Common工程中USEWMI、USEEVENTLOG和USEPERFORMANCECOUNTER三个编译参数,重新编译EntLib。

用了第3种方法,不行,步骤:

(1. Open Start->programs->MS Patterns and Practices -> Ent Lib -> App Blocks -> Ent Lib.Sln.
2. Take your own sweet time to minimize all the folder(s) in ur solution window.
3. Rt Clk on the “Common” project and go to “Properties”
4. In the “Configuration Properties” go to the “Build” option.
5. In the Conditional Build section of the property grid, remove everything except “DEBUG;TRACE”
6. Close everything and recompile.
Remember...on compilation nothing will go to your common bin folder. I just plainly used the “Copy Assemblies to bin directory” option in my Start->programs->MS Patterns and Practices -> Ent Lib part of my menu. )

用第1种方法可以解决,第2种没试过。

四、遇到的问题:

关于MS SQL SERVER中的DATEDIFF(XXX,YYY,ZZZ)函数

解决方法:

示例用法:select * from datetimetest where datediff(dd,curdate,getdate())=0

即找出与系统当前时间相同的记录,精确到日期,“dd”即指出计算curdate,getdate()的日期差,如果指定“mm”,则计算出差几个月。

由于SQL SERVER中日期保留的精度到毫秒级(datetime)或分钟级(smalldatetime),所以当你所需的只是日期的比较时,上面的函数相当有用。

五、遇到的问题:

几个与数据操作有关的接口及其他:

解决方法:

IDbConnection

IDbCommand

IDataParameter

IDataReader

IDbTransaction

IDbDataAdapter

另:

public sealed class SqlDataAdapter : DbDataAdapter, IDbDataAdapter

public sealed class SqlConnection : Component, IDbConnection

public sealed class SqlCommand : Component, IDbCommand, ICloneable

public sealed class SqlParameter : MarshalByRefObject,

IDbDataParameter, IDataParameter, ICloneable

public sealed class SqlDataReader : MarshalByRefObject,

IEnumerable, IDataReader, IDisposable, IDataRecord

public sealed class SqlTransaction : MarshalByRefObject,

IDbTransaction, IDisposable

以上内容有助于编写通用的数据库操作类

六、遇到的问题:

关于MSSQL存储过程中的字符串

解决方法:

注意单引号:

例:select name as 'employeename' from employee,转成字符串:

@sqlstring='select name as ''employeename'' from employee'

Sql server中单引号在字符串中用两个单引号表示

七、遇到的问题:

关于MSSQL存储过程中的“默认参数”

解决方法:

示例

create proc InventoryIn

@AreaID varchar(50)='',

@RegionID varchar(20)='',

@SeriesID varchar(20)='',

@ItemID varchar(30)=''

as

declare @sqlstring nvarchar(1000)

set @sqlstring='select………'

if (@AreaID!='')

begin

set @sqlstring=@sqlstring+'and FAREA_ID='+@AreaID

end

if(@RegionID!='')

begin

set @sqlstring=@sqlstring+'and FREGION_ID='+@RegionID

end

if(@SeriesID!='')

begin

set @sqlstring=@sqlstring+'and FSERIES_ID='+@SeriesID

end

if(@ItemID!='')

begin

set @sqlstring=@sqlstring+'and FItemId='+@ItemID

end

set @sqlstring=@sqlstring+'order by FAREA_ID,FREGION_ID'

execute sp_ExecuteSql @sqlstring

则运行该存储过程时,可以不输入参数直接运行,或者输入某些参数,当然如果要输入第二个参数,则第一个参数也必须有。

调用系统存储过程sp_ExecuteSql时要求参数类型一定要为nvarchar型,当然,也可以使用以下的形式:

create proc ExecString

as

declare @sqlstring varchar(100)

set @sqlstring='select * from employees'

execute (@sqlstring)

(注意,若varchar未规定长度,则会提示错误)

八、遇到的问题:

关于SQL中求百分比的方法

解决方法:

示例

Select

cast(cast(ON_HAND_QTY*100/(select sum(ON_HAND_QTY) from #InventoryQtyTemp) as decimal(10,2)) as varchar) +'%'  as  'ON_HAND_QTYPercent'

from #InventoryQtyTemp

当然,在求百分比运算中,可能遇到除零问题,要加些判断:

……..

select @onhand=sum(ON_HAND_QTY) from R_inventoryQty

if(@onhand!=0)

begin

select

cast(cast(ON_HAND_QTY*100/(select sum(ON_HAND_QTY) from #InventoryQtyTemp) as decimal(10,2)) as varchar) +'%'  as  'ON_HAND_QTYPercent'

from #InventoryQtyTemp

end

else

begin

select

0  as  'ON_HAND_QTYPercent'

from #InventoryQtyTemp

end

九、遇到的问题:

关于DTS的简单使用

解决方法:

DTS即“数据转换服务”,在MS SQLServer中展开企业管理器左侧的树,即可看见。右击“数据转换服务”,选择“新建包”,可以创建DTS的界面:

1、选择左侧“连接”栏中的“Micorsoft OLE DB Provider for SQL Server”,在弹出的窗口中可以选择数据库等相关项,以之作为“源”。

2、同1,再创建一个“Micorsoft OLE DB Provider for SQL Server”,作为“目的”。

3、在“任务”栏中选择“转换数据任务”(齿轮状图案),依次点击“源”与“目的”,此时会在两者之间形成一条连接线。

4、双击连接线,则会出现相应的设置,例如源表,所要转到的目的表,以及转换规则等等。

5、设置完毕点击保存。

6、返回企业管理器窗口,“数据转换服务”----“本地包”(仅当保存时选择保存到“SQL Server”才会出现在本地包),可以见到刚才创建的包,右击包,选择“调度包”,可以设置定时执行包,能够定时调度也是DTS最有用的一点。当然,在设置调度包之前,需要在“服务管理器”中开启“SQL Server Agent”服务。

7、在创建DTS包时,还可以使用“工作流”,例如可以转换服务执行之前,先执行一段SQL语句,可以选择“任务”栏中的“执行SQL任务”,写入需要执行的语句。然后同时选中右侧窗口中的“执行SQL语句”图标和源数据库图标,选择窗口上方的“工作流”,可以有三种工作流类型。

另外:

设置“源数据库”与“目的数据库”的另一种方法是创建udl文件。创建的方法可以创建文本文件,改后缀为udl即可,设置相应的数据库项。然后在创建DTS的窗口左侧选择“Microsoft Data Link”,选择刚才创建的udl文件即可。

十、遇到的问题:

关于SQL中的日期函数

解决方法:

Datediff:DATEDIFF ( datepart , startdate , enddate )

例:select …… where datediff(dd,ON_HAND_DTTM,@datequery)=0,可取从年到毫秒的精度,由于SQL Server中日期型存储常保存到毫秒,当需要按天计算时,可以使用类似上式。

Datepart:DATEPART (datepart , date)

可取从年到毫秒的精度,返回相应部分的数值。

YearMonthDay

和上式类似效果。以上各式详细参见SQL Server联机丛书。

转载于:https://www.cnblogs.com/morvenhuang/archive/2006/03/11/347955.html

.NET新手系列(六)相关推荐

  1. Silverlight Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效...

    原文:Silverlight & Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化.波感特效 当我们在进行Silverlight & Bl ...

  2. [基础知识]Linux新手系列之三

    2019独角兽企业重金招聘Python工程师标准>>> [基础知识]Linux新手系列之三 给Linux新手 [系列之三] Linux相关资料由兄弟连分享 OK,从哪里得到Linux ...

  3. Android新手系列教程(申明:来源于网络)

    Android新手系列教程(申明:来源于网络) 地址:http://blog.csdn.net/column/details/androidcoder666.html 转载于:https://www. ...

  4. xen虚拟化实战系列(六)之xen虚拟机破解密码

    xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装 xen虚拟化实战系列(二)之xen虚拟机安装 xen虚拟化实战系列(三)之xen虚拟机复制 xen虚拟化实战系列(四)之 ...

  5. 数学之美系列六 -- 图论和网络爬虫 (Web Crawlers)

    数学之美系列六 -- 图论和网络爬虫 (Web Crawlers) [离散数学是当代数学的一个重要分支,也是计算机科学的数学基础.它包括数理逻辑.集合论.图论和近世代数四个分支.数理逻辑基于布尔运算, ...

  6. 2013年最值得我们学习的网页作品示例【系列六】

    这是本系列的最后一篇文章了,和大家一起学习2013年里最优秀的网页设计作品.在过去的一年,网页设计领域出现了几个新的流行趋势,最热门的要数响应式设计(Responsive Design)和扁平化设计( ...

  7. Web前端开发人员和设计师必读文章推荐【系列六】

    这篇文章收录了十一月份发布在梦想天空的优秀文章,特别推荐给Web开发人员和设计师阅读.梦天空博客关注前端开发技术,展示最新HTML5和CSS3技术应用,分享实用的jQuery插件,推荐优秀的网页设计案 ...

  8. JAVA面试常考系列六

    转载自 JAVA面试常考系列六 题目一 一个Applet有哪些生命周期? 一个Applet的生命周期分为以下四个阶段: Init 每次加载时都会初始化一个小程序.此方法通知Applet,方法已经被装入 ...

  9. struts2官方 中文教程 系列六:表单验证

    先贴个本帖的地址,以免被爬:struts2教程 官方系列六:表单验证  即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 介 ...

  10. ONNX系列六 --- 在Java中使用可移植的ONNX AI模型

    目录 安装和导入ONNX运行时 载入ONNX模型 使用ONNX运行时进行预测 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- 带有ONNX的便携式神经网络 ...

最新文章

  1. 微信服务号、公众号、企业号注册
  2. Apple首篇AI文章,SimGAN
  3. Javascript中的深拷贝和浅拷贝
  4. 各类攻击 单一协议 pcap数据包 下载网站
  5. Python学习笔记系列——函数
  6. Android系统的启动流程简要分析
  7. Android开发切换host应用
  8. 多线程之死锁就是这么简单
  9. Spring框架的事务管理的基本概念
  10. jq中查找上级_【节能学院】电能管理系统在福州三岐小学项目中的设计及应用...
  11. 西门子array数据类型_西门子S71200之间以太网通信(图文)
  12. php充值注入,PHP注入一路小跑
  13. C#编写程序操作数据库如何防止SQL注入漏洞的发生
  14. CIA的海外间谍,要如何完美避开AI的监控?
  15. DB2 V10.5 PureScale支持HADR
  16. 计算机技术运用家具,计算机技术在家具企业中的应用与控制管理
  17. 十款大名鼎鼎的开源软件
  18. 传导EMI抑制-π型滤波器设计
  19. Linux就业技术指导:简历项目经验示例
  20. 【论文阅读】Rethinking the Value of Network Pruning

热门文章

  1. 西湖大学新冠研究登上Science封面,解析ACE2全长结构,是他们看清了新冠病毒如何入侵人体...
  2. Kaldi拜拜!PyTorch语音工具包SpeechBrain要来了,支持多种语音任务,实现最强水准...
  3. 谷歌新App观妙中国发布:AR传承文化艺术,小米vivo应用宝可体验
  4. 阿里CTO张建锋:云拐点已至,All in cloud;贾扬清完整title公开
  5. 分享Silverlight/WPF/Windows Phone一周学习导读(07月18日-07月24日)
  6. 直播卡顿原因详解及优化
  7. 基于SIP和RTP协议的开源VOIP之QuteCom简单介绍
  8. Photoshop激活教程
  9. Hystrix概述(二)
  10. BZOJ3823 : 定情信物