.NET私钥加密实现

     加密分目前为两种:私钥和公钥加密,也称对称性和非对称性加密.
     私钥加密只使用一把钥匙来加解密,因为同一把密钥既用于加密又用于解密,所以私钥加密非常快(与公钥算法相比),特别适用于对较大的数据流执行加密转换。
      加解密有太多东西要介绍了,所以这次只介绍私钥加密,私钥加密,只用于一次加密一个数据块,也就是将N个字节加密后转换为加密的字节输出,既然是加密 ,
      当然需要一个KEY,Right?而在.NET 中提供的加密类使用的是一个称为"密码块链 (CBC) "的链模式,它需要一个KEY和一个IV初始化向量,它是分块来加密的,而要先用IV向量来加密第一个块,(万事必须有个开头嘛)
      接着就用上一个块加密下一个块直到读取完毕.
      另外发送和接收消息双方,必须互相传达了密钥和 IV 的值且密钥不能为未授权用户所知.

      私钥加密的优点:速度快.缺点:有耐心的朋友可以用穷举法破解,呵呵,我可没耐心.
      用途: 通常与公钥加密一起使用,在公钥加密中,先对公钥加密后再将公钥发送给对方.给公钥加密算法一个辅助作用.
   
     啰嗦完了,下面看代码:(先在执行文件目录建一个文本文件)

// ------------------------------文件加密过程
            
             FileStream fin
= new  FileStream( " input.txt " ,FileMode.Open,FileAccess.Read);
            FileStream fout
= new  FileStream( " output.txt " ,FileMode.OpenOrCreate,FileAccess.Write);
            
            
// 创建加密类

            DES des 
=   new  DESCryptoServiceProvider();
            des.GenerateKey();  
// 获取随机产生的Key,和 IV
            des.GenerateIV();
            
byte [] keys = des.Key;
            
byte [] ivs = des.IV;
            
            
long  leng = fin.Length;  // 获取文件的长度
             long  temp = 0 ;   // 临时变量
             byte [] buffer = new   byte [ 400 ];   // 用于存储文件内容于缓存

            CryptoStream cStream
= new  CryptoStream(fout,des.CreateEncryptor(keys,ivs),CryptoStreamMode.Write);  // 创建加密流并写入到"output.txt"文件
             while (temp < leng)  
            
{
                
int wLeng=fin.Read(buffer,0,400); //写入缓冲
                cStream.Write(buffer,0,wLeng); //写入文件
                temp=temp+leng;
                Console.WriteLine(
"加密成功");

                Console.ReadLine();
            }

            cStream.Close();
            
            fout.Close();
            fin.Close();

 

解密:

// ------------------------------文件解密过程
            
            FileStream fin1
= new  FileStream( " output.txt " ,FileMode.Open,FileAccess.Read);
            FileStream fout1
= new  FileStream( " 解密.txt " ,FileMode.OpenOrCreate,FileAccess.Write);
            
             

            
// DES des1 = new DESCryptoServiceProvider();
            
// des1.GenerateKey();   // 获取随机产生的Key,和 IV
            
// des1.GenerateIV();
            
// byte[] keys1=des1.Key;
            
// byte[] ivs1=des1.IV;
            
            
long  leng1 = fin1.Length;  // 获取文件的长度
             long  temp1 = 0 ;   // 临时变量
             byte [] buffer1 = new   byte [ 400 ];   // 用于存储文件内容于缓存

            CryptoStream cStream1
= new  CryptoStream(fout1,des.CreateDecryptor(keys,ivs),CryptoStreamMode.Write);  // 创建加密流并写入到"output.txt"文件
             while (temp1 < leng1)  
            
{
                
int wLeng1=fin1.Read(buffer1,0,400); //写入缓冲
                cStream1.Write(buffer1,0,wLeng1); //写入文件
                temp1=temp1+leng1;
                Console.WriteLine(
"解密成功");

                Console.ReadLine();
            }

            cStream.Close();
            
            fout.Close();
            fin.Close();
    
// --------------------------Over

 

关于DES算法的加密过程参考:http://www.vchome.net/tech/datastruct/datasf25.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值