- 热门文章:
- · 解析.Net框架下的XML编程技术
- · 用C#访问Hotmail
- · 把.NET程序部署到没有安装.NET Framwork的机器上
- · System.Diagnostics命名空间里的Debug类和Trace类的用途
- · 在ASP.NET中将数据直接输出成Excel内容
- · 检测客户端显示器分辨率、浏览器类型和客户端IP
- · .NET Framework 之 Common Language Runtime
- · 微软.NET平台中类型使用的基本原理----微软 .NET平台系列文章之二(译文/赵湘宁)
- · .NET中的特殊类型成员----微软 .NET平台系列文章之三(译文/赵湘宁)
- · Visual Studio.net Beta2安装
- · VS.NET Beta2安装后添加/删除程序不能正常启动的问题的解决方案
- · 转贴自JoyASP:.NET框架(一)
上一篇:安全第一:.NET加密技术指南(2) >>
安全第一:.NET加密技术指南(1)
信息安全是计算机应用的首要问题之一,但目前关于.NET加密功能的范例却少之又少。有鉴于此,本文探讨了在.NET平台下加密/解密文件的一般过程,并提供了一个加密/解密文件的工具。
Web服务以不容置疑的态势迅速发展,促使许多单位开始考虑.NET之类的开发平台。但是,出于对安全问题的担心,一些单位总是对采用新技术心存顾虑。好在有许多成熟的安全和网络技术,例如虚拟私有网络(VPN)和防火墙等,能够极大地提高Web服务应用的安全和性能,让开发者拥有选择安全技术的自由,而不是非得使用尚在发展之中的XML安全技术不可。
虽然安全是信息系统的首要问题,但有关.NET安全和加密工具的范例却少之又少。看看大多数.NET书籍的目录,找不到任何有关安全的题目,更不用说关于密码系统的探讨了。
有鉴于此,本文将介绍如何在VB开发中运用.NET的加密和密钥生成类,提供一个可用来加密和解密文件的工具Cryption。有了这个工具,你就可以在硬盘上保存各种机密文件,例如所有的密码/用户名字信息、收支文件、以及其他想要保密的信息,还可以加密那些通过Internet发送的文件。加密技术的用途非常广泛,你可以进一步定制本文提供的工具满足某些特殊需要,例如增加批处理能力等。
一、两类重要的安全威胁
攻击和泄密是计算机面临的两大安全威胁。攻击可能来自病毒,例如它会删除文件、降低机器运行速度或引发其它安全问题。相比之下,泄密往往要隐蔽得多,它侵害的是你的隐私:未经授权访问硬盘文件,截取通过Internet发送的邮件,等等。泄密还可能伴随着攻击,例如修改机密文件等。
针对泄密的最佳防范措施就是加密。有效的加密不仅杜绝了泄密,而且还防范了由泄密引发的攻击。加密技术有时还用于通信过程中的身份验证——如果某个用户知道密码,那么他应该就是那个拥有这一身份的人。
然而必须说明的是,没有一种防范泄密的安全技术是绝对坚固的,因为密码有可能被未经授权的人获得。
二、使用.NET加密功能的前提
首先,要想使用.NET的安全功能,就必须用Imports语句引入加密用的包。试验本文涉及的任何代码之前,请在VB代码窗口的顶部加入下列Imports语句:
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography
第二,美国政府过去限制某些加密技术出口。虽然这些限制不再有效,.NET框架在Windows的出口版本中禁用了“高级”加密技术。如果你的Windows不带高级加密能力,可以从微软网站下载更新包:对于Windows 2000,安装Service Pack 2包含的High Encryption Pack;对于NT,安装Service Pack 6a。对于Windows ME、95、98的用户,IE 5.5也包含了High Encryption Pack。
三、加密/解密工具概况
本文提供的工具可用来加密和解密文件,如果你急着给一些文件加密,只需直接启动本文后面提供的工具即可。
这个工具提供了一个用来输入文件名字的文本框和一个输入密钥的文本框,通过便捷的用户界面提供加密、解密和密钥生成功能。在图一中,上方的文本框用来输入待加密/解密文件的名字;下面的文本框用来输入8个字符的密码。执行加密操作之后将生成一个新的文件,这个经过加密的文件和原始文件在同一目录下,文件名字也和原始文件的一样,但加上了“xx”后缀,例如,假设原始文件是MyFile.txt,则加密得到的文件是MyFilexx.txt。
加密好之后,原始文件不一定非删除不可,但一般来说最好删除,因为加密的根本目的就是为了隐藏原始文件的数据。如果要从加密后的文件恢复出原始文件,在上面的文本框中输入MyFilexx.txt,然后提供密码,Cryption工具将创建一个与原始文件一样的MyFile.txt文件。也就是说,Cryption把文件名字后面的“xx”看作是要求解密密文的标志。
注意:加密文件之后如果忘记了用来加密该文件的密码,再想恢复出原始文件就不可能了。当然,这与密码本身的复杂程度有关,要想保证文件的安全,最好采用较复杂的密码,例如混合运用字母、数字和特殊字符(如“$”符号等)。
.NET提供的加密技术不止一种,不过本文讨论的主要是对称加密。对称加密也称为私有密钥加密,它的特点是加密和解密用的是同一个密钥(实际上是同一种算法),解密方和加密方都有责任保障密码的安全(对于公用密钥、不对称加密,密钥一共有两个,其中一个密钥是公开的,这是当前公认最有效的加密技术,但就速度而言要比对称加密算法慢不少)。
在正式利用.NET加密类加密文件之前,首先必须从用户提供的密码生成一个密钥。密钥可以利用Hash函数生成,Hash函数把用户的密码字符串转换成一组类似随机数序列的、无意义的数据,这组数据可作为密钥使用,在加密过程中对原始数据进行唯一性变形处理。
例如,用密钥加密数据的一种办法是把原始数据的ASCII码加上密钥的ASCII码:
密钥:ab = ASCII: 97, 98
数据:merry = ASCII: 109, 101, 114, 114, 121
把这组数据的ASCII码加上密钥的ASCII码(必要时重复使用密钥),得到的加密结果是:
97 98 97 98 97
+109 +101 +114 +114 +121
206 199 211 212 218
对于同样的数据,Hash算法总是生成同样的结果(这就是说,对于同一个密码,同一Hash算法总是生成相同的bit序列)。实际上,在本文提供的代码中,利用.NET的SHA1CryptoServiceProvider类的ComputeHash方法可以验证这一点,例如,对于同一个输入参数morph,任何时候该方法总是返回下面的结果:124,230,93,253,197,206,136,72。因此,如果有人知道密码以及生成密钥的算法,他也可以轻松地推算出密钥。
下一篇:解析.Net框架下的XML编程技术 >>
相关文章:
- · 转贴自JoyASP:.NET框架(二)
- · 怎么在VS7中为FORM添加菜单项?
- · 再来一个Bug报告吧
- · 微软的远程处理框架.NET Remoting(转天极网)之一
- · 继续推荐俺的《新概念ASP.NET教程》
- · 微软的远程处理框架.NET Remoting(转天极网)之二
- · .NET编译时都做了一些什么
- · 包装很好,里面是什么(转自微软)
- · Microsoft.NET为什么难于理解
- · 关于OLE DB的.NET思考(转自微软)
- · 微软.Net卧虎藏龙
- · 初尝Visual Perl和Perl.Net
- · c#的运行环境的系统最低要求.还有.net的运行环境的最低系统要求?3ks....
- · About Public Structure----内详
- · .NET语言的选择 [特别推荐] (转贴)
- · 告诉大家一个消息Unix.Net已有雏形了.
- · 是否能让JAVA 和 .NET框架共存(转)
- · 转贴:Microsoft Application Center 2000 组件负载平衡技术概述(2)
- · 转贴:Microsoft Application Center 2000 组件负载平衡技术概述(1)
- · 漫谈.Net中的自动垃圾收集(Garbage Collection)机制(转)
- · .net平台的5个相关部分
- · 微软对.net的定义
- · 非官方观点:Java VS. .NET(转Java技术)
- · 转业界评说:DotNet的进一步消息
- · .NET 技术FAQ
- · Microsoft .NET框架糅合各种编程语言,开创Web新时代
- · .Net可能将支持Linux
- · JIT编译
- · Microsoft 中间语言(MSIL)
- · 按以下步骤
- · 关注Delphi.NET,呵呵,我们又要吞并一个版了(转自CSDN)
- · Win2000 Server安全入门
- · Microsoft的.NET 策略 (1)
- · Microsoft的 .NET 策略(2)
- · 在新的平台上编程 ----微软 .NET平台系列文章之一(译文/赵湘宁 )
- · .NET与ECMA,以及其它平台的版本
- · 标题 VS.NET为企业做好了准备吗?
- · 非官方观点 Java vs .NET(转载),不错,大家看看
