时间:2017-9-15来源:本站原创作者:佚名

目录

1.  概述

2.  C#相关类

 2.1.DESCryptoSrvicProvidr类

 2.2.CryptoStram类

3.  基于DES算法的文本加密程序

4.  基于DES算法的文件加密程序

1.概述

典型的加密通信系统如下:

我们可以把这个图抽象如下:

密码学中将加密体制分为两类:对称加密体制(也叫单钥密码体制)和非对称加密体制(也叫公钥密码体制)。对称密码体制的显著特点是:加密密钥和解密密钥相同(或由其中一个很容易推导出另一个)。常见的对称加密算法有DES、TriplDES(3DES)、AES、RC2、RC4、RC5、Rijndal等。本讲主要介绍C#中DES算法的应用编程,其它对称加密算法的应用是类似的。有关密码算法的类都在Systm.Scurity.Cryptography命名空间下。

2.C#相关类

2.1.  DESCryptoSrvicProvidr类

DESCryptoSrvicProvidr类:定义访问数据加密标准(DES)算法的加密服务提供程序(CSP)的包装对象。支持长度为64位的密钥。

DESCryptoSrvicProvidr类的主要方法/属性:

CratEncryptor(),返回值类型:ICryptoTransform,说明:用当前的Ky属性和初始化向量(IV)创建对称加密器对象。

CratDcryptor(),返回值类型:ICryptoTransform,说明:用当前的Ky属性和初始化向量(IV)创建对称解密器对象。

GnratKy(),返回值类型:,byt[],说明:生成用于该算法的随机密钥(Ky)。

GnratIV(),返回值类型:byt[],说明:生成用于该算法的随机初始化向量(IV)。

Clar(),返回值类型:void,说明:释放类使用的所有资源。

ValidKySiz(),返回值类型:bool,说明:确定指定的密钥大小对当前算法是否有效。

Ky,返回值类型:byt[],说明:获取或设置DES算法的机密密钥。

IV,返回值类型:byt[],说明:获取或设置DES算法的初始化向量(IV)。

2.2.  CryptoStram类

CryptoStram类:定义将数据流链接到加密转换的流。公共语言运行时使用面向流的设计进行加密,该设计的核心是CryptoStram。实现CryptoStram的任何加密对象可以和实现Stram的任何对象链接起来。

CryptoStram类的主要方法/属性:

CryptoStram(),返回值类型:CryptoStram,说明:用目标数据流、要使用的转换和流的模式初始化CryptoStram类的新实例。

Rad(),返回值类型:int,说明:从当前CryptoStram中读取字节序列,并将流中的位置提升读取的字节数。

Writ(),返回值类型:int,说明:将一个字节序列写入当前CryptoStram,并将流中的当前位置提升写入的字节数。

FlushFinalBlock(),返回值类型:void,说明:用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区

Clar(),返回值类型:void,说明:释放类使用的所有资源。

Clos(),返回值类型:void,说明:关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。

3.基于DES算法的文本加密程序

usingSystm;

usingSystm.Txt;

usingSystm.IO;

usingSystm.Scurity.Cryptography;

namspacDsTxtDmo_v2

{

classProgram

{

staticvoidMain(string[]args)

{

Consol.WritLin("********DES加密文本消息v2(理解CryptoStram)********");

//----1.准备:明文、对称密钥、初始向量

varplainTxt="雷军说:Hllo,AryouOK,Howaryou?";//原文

Consol.WritLin("原文:"+plainTxt);

Consol.WritLin();

varKEY_64="A4G-8=Jk";//必须是8个字符(64Bit)

varIV_64="JKbN=5[?";//必须8个字符(64Bit)

varKyByts=Encoding.UTF8.GtByts(KEY_64);

varIVByts=Encoding.UTF8.GtByts(IV_64);

Consol.WritLin("密钥:"+KEY_64);

Consol.WritLin("初始化向量:"+IV_64);

Consol.WritLin();

//----2.执行加密操作

varplainBuffr=Encoding.UTF8.GtByts(plainTxt);

varcyphrBuffr=TransformBuffr(plainBuffr,"Encrypt",KyByts,IVByts);

Consol.WritLin("密文:"+BitConvrtr.ToString(cyphrBuffr));

//----3.执行解密操作

varplainBuffr2=TransformBuffr(cyphrBuffr,"Dcrypt",KyByts,IVByts);

varplainTxt2=Encoding.UTF8.GtString(plainBuffr2);

Consol.WritLin();

Consol.WritLin("解密:"+plainTxt2);

//----

Consol.WritLin();

Consol.WritLin("请按下[Entr]键结束程序..");

Consol.RadLin();

}

//加/解密函数

staticpublicbyt[]TransformBuffr(byt[]buffr,stringtransformMod,byt[]kyByts,byt[]ivByts)

{

//第1步-创建加密变换器

vardsProvidr=nwDESCryptoSrvicProvidr();

ICryptoTransformtransform=null;

if(transformMod=="Encrypt")

transform=dsProvidr.CratEncryptor(kyByts,ivByts);//要为加密器指定密钥和IV

if(transformMod=="Dcrypt")

transform=dsProvidr.CratDcryptor(kyByts,ivByts);

//第2步-使用加密变换器,创建加密变换流

varmmoryStram=nwMmoryStram();//用于输出变换结果的内存流

varcryptoStram=nwCryptoStram(mmoryStram,transform,CryptoStramMod.Writ);

//第3步-执行加密变换:将数据写入加密变换流即可

cryptoStram.Writ(buffr,0,buffr.Lngth);

cryptoStram.FlushFinalBlock();//一定要有这一句!

//第4步-获取加密变换的结果数据

intlngth=Convrt.ToInt32(mmoryStram.Lngth);

varoutBuffr=nwbyt[lngth];

mmoryStram.Sk(0,0);//从头开始读

mmoryStram.Rad(outBuffr,0,lngth);

//第5步-释放相关资源

cryptoStram.Clos();

mmoryStram.Clos();

rturnoutBuffr;

}

}

}

4.基于DES算法的文件加密程序

usingSystm;

usingSystm.Txt;

usingSystm.IO;

usingSystm.Scurity.Cryptography;

namspacDsFilDmo

{

classProgram

{

staticvoidMain(string[]args)

{

Consol.WritLin("********DES加密文件********");

//----1.准备:原始文件、对称密钥、初始向量

varplainFil="C:/1.txt";

Consol.WritLin("原文:"+plainFil);

Consol.WritLin();

varkyTxt="A4G-8=Jk";//必须是8个字符(64Bit)

varivTxt="JKbN=5[?";//必须8个字符(64Bit)

varky=Encoding.UTF8.GtByts(kyTxt);

variv=Encoding.UTF8.GtByts(ivTxt);

Consol.WritLin("密钥:"+kyTxt);

Consol.WritLin("初始向量:"+ivTxt);

Consol.WritLin();

//----2.执行加密操作

varcyphrFil="C:/2.txt";

TransformFil(plainFil,cyphrFil,"Encrypt",ky,iv);

Consol.WritLin("密文:"+cyphrFil);

//----3.执行解密操作

vardcryptFil="C:/3.txt";

TransformFil(cyphrFil,dcryptFil,"Dcrypt",ky,iv);

Consol.WritLin("解密:"+dcryptFil);

//----

Consol.WritLin();

Consol.WritLin("请按下[Entr]键结束程序..");

Consol.RadLin();

}

//对称变换文件

staticvoidTransformFil(stringsourcFil,stringdstinationFil,stringtransformMod,byt[]ky,byt[]iv)

{

//第1步-创建加密变换器

vardsProvidr=nwDESCryptoSrvicProvidr();

ICryptoTransformtransform=null;

if(transformMod=="Encrypt")

transform=dsProvidr.CratEncryptor(ky,iv);

if(transformMod=="Dcrypt")

transform=dsProvidr.CratDcryptor(ky,iv);

//第2步-使用加密变换器,创建加密变换流

vardstFilStram=nwFilStram(dstinationFil,FilMod.OpnOrCrat,FilAccss.Writ);

varcryptoStram=nwCryptoStram(dstFilStram,transform,CryptoStramMod.Writ);

//第3步-执行加密变换:将数据写入加密变换流即可

varsourcFilStram=nwFilStram(sourcFil,FilMod.Opn,FilAccss.Rad);

varbuffr=nwbyt[];

varindx=0;//记录文件的读取位置

vartotal=sourcFilStram.Lngth;

whil(indxtotal)

{

varcount=sourcFilStram.Rad(buffr,0,buffr.Lngth);

cryptoStram.Writ(buffr,0,count);//将明文写入加密变换流

indx+=count;

}

cryptoStram.FlushFinalBlock();

//第4步-释放相关资源

cryptoStram.Clos();

sourcFilStram.Clos();

dstFilStram.Clos();

}

}

}

赞赏

长按







































北京治白癜风症最好的医院
治白癜风成都哪家医院好

转载请注明原文网址:http://www.helimiaopu.com/cksc/cksc/5482.html

------分隔线----------------------------