动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.什么是EJB.
.关于 mysql5 改密码后不能登录问.
.Jakarta Struts学习之应用实践.
.使用Java操作文本文件.
.SpringMultiAction的简单示例.
.Struts 和 Tiles 辅助基于组件的.
.写了一个简单的程序(ArrayList).
.Java线程总结.
.管理复杂应用性能管理实用方法(1).
.CreateFolder 方法.
.解决Java程序在MOTO E680i中声音.
.WebLogic的研究之开发、部署EJB(.
.使用Java访问网络资源.
.Java2的安全新特性下的Applet数字.
.Struts框架基础篇.
.log4jB/S实战演练:自动设置备份文.
.Java学习之ArrayList(动态操纵数.
.使用Socket连接穿越CMWAP代理.
.基于MVC模式的Struts框架研究与应.
.Java语言深入-关于Java语言的内存.

Microsoft .NET 中的简化加密(2)(图)

发表日期:2008-1-5 |



  实现加密和解密的密钥
  要使用对称算法,必须提供要使用的密钥。每个 CryptoSymmetricAlgorithm 实现都提供一种 GenerateKey 方法。它们实际上使用的是公共语言运行时 (CLR) 类中内置的随机数生成器类。我们来看一下 Gen Key(生成密钥)按钮的 Click 事件处理程序,看它如何生成要使用的随机密钥值。
  
 Microsoft .NET 中的简化加密(2)(图)(图一)


  获取服务提供程序的特定实现后,只需调用 GenerateKey 方法来创建一个用于加密的新的随机密钥。密钥的大小取决于用来加密的特定提供程序。例如,DES 密钥的大小为 64 位,而 TripleDES 密钥的大小为 192 位。每个 SymmetricAlgorithm 类上都有一个 KeySize 属性,它将返回用于生成密钥的密钥大小。
  我们还需要生成初始化向量 (IV)。IV 将帮助算法生成最终加密字符串的数据块。IV 用于开始第一个块的加密。假如不提供 IV,那么只要密钥相同,在字符串之间传递的通用数据将保持同一种模式。因此,需要使用 IV 作为加密数据的“随机”组件。通过这种方式,只要使用的 IV 不同,即使密钥相同,同一个数据也会被加密成完全不同的值。下面是生成新的 IV 的 Gen IV(生成 IV)按钮的源代码。
  
 Microsoft .NET 中的简化加密(2)(图)(图二)

  此代码看起来与生成密钥的代码非常相似。每个加密服务提供程序类上都有一个 GenerateIV() 方法。假如未提供 IV,该方法将生成一个 IV。
  
  加密数据
  获得密钥和初始化向量后,现在可以使用 Key、IV 和 Original String 值来创建原始字符串值的加密版本。单击 Encrypt(加密)按钮将运行以下代码。
  
 Microsoft .NET 中的简化加密(2)(图)(图三)

  Click 事件过程将调用名为 EncryptString() 的方法,从 Original String(原始字符串)文本框中接受值并对其进行加密。然后返回该值并将其放到 Encrypted String(加密字符串)文本框中。下面是 EncryptString() 方法的代码。
  
 Microsoft .NET 中的简化加密(2)(图)(图四)

  现在我们分开看一下各行代码并了解这些代码的作用。首先是加密进程的几个变量。
  
 Microsoft .NET 中的简化加密(2)(图)(图五)

  ICryptoTransform 是一个接口。需要此接口才能在任何服务提供程序上调用 CreateEncryptor 方法,服务提供程序将返回定义该接口的实际 encryptor 对象。
  然后需要将原始字符串转换成字节数组。大多数 .NET 加密算法处理的是字节数组而不是字符串。
  byt = Encoding.UTF8.GetBytes(Value)
  现在可以执行实际的加密了。此进程需要创建一个数据流,用于将加密的字节写入到其中。要使用名为 ms 的 MemoryStream 对象、ICryptoTransform 对象(提供给 CryptoStream 类的构造函数)以及说明您希望在何种模式(读、写等)下创建该类的枚举常数。创建 CryptoStream 对象 cs 后,现在使用 CryptoStream 对象的 Write 方法将数据写入到内存数据流。这就是进行实际加密的方法,加密每个数据块时,数据将被写入 MemoryStream 对象。
  
 Microsoft .NET 中的简化加密(2)(图)(图六)

  创建 MemoryStream 后,该代码将在 CryptoStream 对象上执行 FlushFinalBlock 方法,以确保所有数据均被写入 MemoryStream 对象。该过程将关闭 CryptoStream 对象。
  最后,该过程将内存数据流从字节数组转换回字符串,这样才可以在窗体上的文本框内显示该字符串。可以使用 MemoryStream ToArray() 方法从数据流中获取字节数组,然后调用 Convert.ToBase64String() 方法,该方法接受字节数组输入并使用 Base64 编码方法将该字符串编码为可读内容。
  
  解密数据
  加密数据后,有时还需要解密数据。解密数据的过程非常简单,与加密过程相似。您需要提供加密过程中使用的密钥和初始化向量。SymmetricAlgorithm 类的 Key 和 IV 属性被定义为字节数组。因此,设置这些属性之前需要提供您创建的字符串并将其转换成字节数组。下面我们看一下窗体内用于解密字符串的 DecryptString 方法。该方法是从窗体上 Decrypt(解密)按钮的 Click 事件处理程序中调用的。
  
 Microsoft .NET 中的简化加密(2)(图)(图七)

  Encrypt 函数和 Decrypt 函数只有三个不同之处
  1、需要使用 CryptoServiceProvider 类的 CreateDecryptor 方法来创建相应的 ICtryptoTransform 对象。
  2、需要将 Base64 编码字符串转换成字节数组。需要使用 Convert.FromBase64String 方法来实现此转换。
  3、通过对原始字节数组进行转换,将字节数组转换成相应的内存数据流。需要将内存数据流从字节数组转换回可以在窗体上再次显示的普通字符串。需要使用 Encoding.UTF8.GetString() 方法来实现此转换。
  注重:Encoding.UTF8 类来自于 System.Text 命名空间。
  是否可以使其更简单?!
  尽管到目前为止显示的代码并不难,但有很多不同的类和接口您可能还不习惯于使用。此外,还要记住很多代码。下面我们学习如何将 Cryptography 类包装成易于使用的类。
  名为 PDSACryptography 的程序集中有两个类,分别为 PDSAHash 和 PDSAEncryption。这两个类用于封装创建散列字符串或加密字符串的实际机制。此外,它们还答应您使用枚举常数来决定要使用哪种散列或加密算法。不必记住每个不同的加密服务提供程序的所有不同的名称,即可获得不错的 Intellisense? 提供程序列表。
  
  使用 PDSAHash 包装散列
  PDSAHash 类包含属性 HashType、HashObject、OriginalString、HashString、SaltValue、UseSalt 和 SaltLength。与该类相关的方法包括 SetEncryptor、CreateSalt、Reset 和 CreateHash。该类中创建了一个称为 PDSAHashType 的枚举,您可以从中选择要使用的相应散列类。该类的作用是将上文所示的代码简化为以下代码。
  
 Microsoft .NET 中的简化加密(2)(图)(图八)

  我宁愿键入以上代码也不愿意记住上文显示的所有代码。如您所见,这段代码相当简单,与上文所述的代码完全相同,只是被包装到一个易于使用的接口中。您可以从本文包含的示例中找到完整的类。下面列举了可以使用该类创建的不同散列算法。
  
 Microsoft .NET 中的简化加密(2)(图)(图九)

  其中的每个算法都为最终的散列提供了一个不同的安全级别。.NET 中完整的散列类列表如下所示:
  ●MD5CryptoServiceProvider
  ●SHA1CryptoServiceProvider
  ●SHA256Managed
  ●SHA384Managed
  ●SHA512Managed
  有关这些不同的散列类型的具体信息,请参阅 Visual Studio .NET 联机文档。
  
  使用 PDSAEncryption 包装加密
  就像 PDSAHash 类可以包装 .NET Framework 中的所有散列功能一样,PDSAEncryption 类可用于包装 .NET Framework 中的各种对称算法类。PDSAEncryption 类包括以下枚举类型,答应您创建各种加密/解密对象。
  
 Microsoft .NET 中的简化加密(2)(图)(图十)

  同样,每个服务提供程序都为加密字符串提供了不同的安全级别。这在 Visual Studio .NET 联机文档中都有具体的介绍,这里不再赘述。
  该类包含属性 EncryptionType、OriginalString、EncryptedString、Key、KeyString、IV、IVString 和 CryptoProvider。其中的大多数属性都是不言自明的,但 Key 和 IV 属于字节数组,而 KeyString 和 IVString 是这些字节数组的字符串表示。
  该类还包含一些方法。例如 Encrypt 和 Decrypt。还有 GenerateKey 和 GenerateIV 方法,假如没有现成的密钥和 IV,可以使用这两个方法创建一个密钥和 IV。另外还有 SetEncryptor 方法,它用于创建将在各种方法中使用的新的 CryptoProvider 对象。
  该类的作用是使加密和解密字符串更轻易实现。例如,下面的代码片断显示了使用该类加密字符串是多么轻易。
  
Microsoft .NET 中的简化加密(2)(图)(图十)

  小结
  使用 Microsoft .NET Framework 中的类可以很轻易地在计算机中保存机密信息。您会发现 Cryptography 命名空间中的多个类都可以很好完成这一任务。为这些类创建包装可以帮助您大大减少需要编写的代码量。强烈建议您按照本文所述,创建类似的包装。
  
  作者简介
  Paul Sheriff 是 PDSA, Inc. 的总裁,该公司提供有关 .NET 的咨询、产品和服务,包括 SDLC 文档和体系结构框架 (www.pdsa.com)。Paul 是 Microsoft 在南加利福尼亚的区域负责人(英文)。他编写的 .NET 方面的书籍包括《Asp.Net Developer's Jumpstart》(Addison-Wesley) 以及在 PDSA Web 站点(英文)上列出的一些电子图书。

上一篇:代码最优化.NET中的内存管理 人气:489
下一篇:Microsoft .NET 中的简化加密(1)(图) 人气:651
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-9 顶级域名交易系统 v3.0 完整版
2008-7-9 ACTCMS网站管理系统 v2.0 Build
2008-7-9 Roclog v3.1.4 build 20080706
2008-7-9 乐彼网上开店系统(56770 Eshop)
2008-7-9 深度学习alexa排名提升专家 v1.0
2008-7-9 BBSXP 2008 Build 8.0.5 正式版
2008-7-9 一句话快速信息发布系统 修正完美
2008-7-9 ACTCMS网站管理系统 v2.0 Build
2008-7-9 乐涛涛留言本 08版
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 GoodCalculator2.0版固件计算器
2008-7-5 RepoName源地址搜索工具 v1.21b
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 TouchCopy多媒体管理软件 v3.13完
2008-7-5 VideosTone视频铃声 v1.1汉化破解
2008-7-5 TouchPad触摸板 v4.44破解版
2008-7-5 VideosTone破解补丁 v1.0
2008-7-5 Feeds GoogleReader客户端 v0.4.3


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報