首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
iiprogram (83)
nizhigang2000 (3)
hongbo781202 (81)
Kendiv (113)
TechnoFantasy (52)
feifei1018 (19)
coofucoo (108)
qingrun (67)
btbtd (83)
longrujun (64)
CSDN - 文档中心 - .NET 阅读:6088   评论: 6    参与评论
标题   .NET中的密码学--对称加密(下)     选择自 cuike519 的 Blog
关键字   对称加密
出处   http://www.codeproject.com

上接http://www.csdn.net/Develop/read_article.asp?id=23386

代码例子

      现在我们有足够关于SymmetricAlgorithm信息。最后,让我们看看将要编码和解码的代码片断。我假设你拥有一个包含txtData和命令按钮控件的窗体。在命令按钮的代码事件里写如下代码。这个代码将要加密TextBox里面的文本并用MessageBox显示,在将加密结果写回到TextBox中。

SymmetricAlgorithm mCryptProv;

MemoryStream mMemStr;

// 加密txtData中的数据,然后将加密结果用MessageBox显示并且回写到TextBox

// 这里你可以配置任何.NET支持的类

DES mCryptProv = SymmetricAlgorithm.Create(“Rijndael”);

// 加密数据将要以流的形式存储在内存中因此我们需要内存Stream对象

mMemStr = new MemoryStream();

// 创建ICryptTransform对象.(在这里我们使用默认的密钥和初始向量).

ICryptTramsform mTransform = mCryptProv.CreateEncryptor();

CryptoStream mCSWriter = new CryptoStream(mMemStr,mTransform,CryptoStreamMode.Write);

StreamWriter mSWriter = StreamWriter(mCSWriter);

mSwriter.Writer(this.txtData.Text);

mSWriter.Flush();

mCSWriter.FlushFinalBlock();

      有一件事情在这里需要注意我们没有在代码的任何地方使用IV和密钥。事实上,在我们在代码里面没有指定他们的时候.NET Framework将为我们自动产生。但是本文包含的例子代码使用的是用户指定的密钥和IV。我们将加密以后的数据使用MemoryStream写到内存中。现在让我们从内存中得到数据的代码。

// 数据已经写入内存但是我们需要回显它到TextBoxMessageBox中,因此要做下面的工作。

// 为接受数据创建字节数组。

byte[] mBytes = new byte[mMemStr.Length - 1];

mMemStr.Position = 0;

mMemStr.Read(mBytes,0,mMemStr.Length);

Text.UTF8Encoding mEnc = new Text.UTF8Encoding();

String mEncData = mEnc.GetString(mBytes);

MessageBox.Show(“加密数据为:\n”+mEncData);

This.txtData.Text = mEncData;

从字节转换为字符串必须要编码。在这里我使用了UTF8Encoding。最后,让我们将解密后的数据再次显示在MessageBoxTextBox中。

// 现在让我们从内存中得到解密后的数据

// 因为我们的数据在内存中,所以我们需要重新使用MemoryStream对象。

// 将内存点置0

mMemStr.Position = 0;

mTransform = mCryptProv.CreateDecryptor();

CryptoStream mCSReader = new CryptoStream(mMemStr,mTransform,CryptoStreamMode.Read);

StreamReader mStrReader = new StreamReader(mCSReader);

String mDecData = mStrReader.ReadToEnd();

MessageBox(“解密数据为:\n”+mDecData);

This.txtData.Text = mDecData;

      这是所有的工作。解密那些数据我们使用了相同的内存流。为了能从流的其实部分读数据我们首先将它置为开始。然后我们用SymmetricAlgorithm对象的CreateDecryptor方法创建IcryptoTransform对象。我们在上面的代码中为了解密重复使用了对象(mMemStr)。你可以创建新的对象(使用新的变量)。然后我们为了从内存中读取数据需要StreamReader对象。While reading that it will also decrypt that data since we passed CryptoStream object during the creation of StreamReader object.

最后的话

      .NET为我们提供了一个非常好的托管途径保护我们的数据。我们可以使用.NET内建的一组类来加密我们的数据。虽然很多的类后台依然使用Crypto APIs技术,我们使用老的Crypto APIs没有任何问题。但是我们可以不用担心那些类的具体实现来安全的使用这些类。在后面的文章我将描述非对称加密算法的神话和用途。

关于例子

      该文章的例子代码让你可以选择一个算法来加密或者解密数据。而且它还让你指定你自己的IV和密钥。代码以两种方式工作。一种是TextBox,意思是你在TextBox中写些东西然后加密或者解密这些内容。第二种,你可以选择要加密或者解密的文件。

相关文章
对该文的评论
znpj ( 2005-04-18)
专业解密由VB/VC/C++/BCB/.NET/DELPHI/JAVA 开发的大型系统
专业解密由PB8,PB9,PB10 开发的大型程序
专业破解大型ERP/MRP/CRM/MIS系统
联系人:qq 3456059
http://www.znpj.com
中南破解,解密天下软件
CSDN 网友 ( 2005-01-31)
完整的可执行代码:SymmetricAlgorithm mCryptProv;

MemoryStream mMemStr;

// 加密txtData中的数据,然后将加密结果用MessageBox显示并且回写到TextBox中

// 这里你可以配置任何.NET支持的类

mCryptProv =SymmetricAlgorithm.Create("DES");

// 加密数据将要以流的形式存储在内存中因此我们需要内存Stream对象

mMemStr = new MemoryStream();

// 创建ICryptTransform对象.(在这里我们使用默认的密钥和初始向量).

System.Security.Cryptography.ICryptoTransform mTransform = mCryptProv.CreateEncryptor();

CryptoStream mCSWriter = new CryptoStream(mMemStr,mTransform,CryptoStreamMode.Write);

StreamWriter mSWriter = new StreamWriter(mCSWriter);

mSWriter.Write(this.txtData.Text);

mSWriter.Flush();

mCSWriter.FlushFinalBlock();
byte[] mBytes = new byte[mMemStr.Length];

mMemStr.Position = 0;

mMemStr.Read(mBytes,0,(int)mMemStr.Length);
String str2=BitConverter.ToString(mBytes);

MessageBox.Show("加密数据为:"+str2);

txtData.Text = str2;
CSDN 网友 ( 2004-12-21)
Text.UTF8Encoding mEnc = new Text.UTF8Encoding();

这里的Text.UTF8Encoding,我找不到
riee ( 2004-03-10)
应该为:
mMemStr.Read(mBytes,0,mBytes.Length);
zhaoding2003 ( 2004-01-29)
这是那个高手想出来的办法啊···!!!

好!!!好~~~