教学服务系统

 找回密码
 立即注册
搜索
查看: 643|回复: 0

信息计算2019级1班7号徐佳颖

[复制链接]

8

主题

21

帖子

80

积分

注册会员

Rank: 2

积分
80
发表于 2022-4-15 17:21:00 | 显示全部楼层 |阅读模式
本帖最后由 徐佳颖 于 2022-4-15 18:33 编辑

一、3DES加密算法简析:
    3DES,也称为 3DESede 或 TripleDES,是三重数据加密算法,相当于是对每个数据库应用三次DES的对称加密算法。
    由于DES密码长度容易被暴力破解,所以3DES算法通过对DES算法进行改进,增加DES的密钥长度来避免类似的攻击,针对每个数据块进行三次DES加密;因此,3DES加密算法并非什么新的加密算法,是DES的一个更安全的变形,它以DES为基本模块,通过组合分组方法设计出分组加密算法。
    3DES是DES向AES过渡的加密算法,它使用2个或者3个56位的密钥对数据进行三次加密。相比DES,3DES因密钥长度变长,安全性有所提高,但其处理速度不高。因此又出现了AES加密算法,AES较于3DES速度更快、安全性更高。

二、运行过程:
  1.创建三个文件夹,如图1所示(可以仅创建用于存放原文的文件夹):
    inFile.txt:用于存放需要加密的原文。
    outFile.txt:用于存放通过3DES加密inFile.txt后的密文。
    finalFile.txt:用于存放通过3DES解密outFile.txt后的译文。
         
       2.运行程序。
   注:获取文件名方式如下:
  1. string FileName = @"C:\Users\winni\Desktop" + Console.ReadLine() + ".txt";
复制代码
   即获得此电脑桌面某txt文件夹,只需在程序运行时输入.txt文件的名字即可。
   按照上述方式输入文件名,如图2所示:
      
3.查看结果。
   打开第1步中创建的三个文件夹,效果如图3所示:
      
    4.更多运行结果。
   ①只创建存放原文(test1.txt)的文件夹的情况:
        
       ②运行程序:
      
       ③将自动生成test2(存放密文)、test3(存放译文)的txt:
      
       ④结果如下:
      

三、思路:
  1.分析TripleDES_类:类中给出了该类的属性、两种构造函数、string类加/解密方法、byte[]数组加/解密方法、文件加/解密方法(以及加/解密所需的获得密钥、获得初始向量的方法)。
  2.由于本次编写程序的目的是达到加密、解密文件,故主要分析类中的以下方法:
  1. public void Encrypt(string inFileName, string outFileName){}

  2. public void Decrypt(string inFileName, string outFileName){}
复制代码
  第一个为文件的加密方法函数,所含参数1为待加密文件的路径,参数2为待加密后文件的输出路径。
  1.         /// <summary>
  2.         /// 加密方法File to File
  3.         /// </summary>
  4.         /// <param name="inFileName">待加密文件的路径</param>
  5.         /// <param name="outFileName">待加密后文件的输出路径</param>
  6.         public void Encrypt(string inFileName, string outFileName)
  7.         {
  8.             try
  9.             {
  10.                 /*使用FileStream类表示文件读写流*/
  11.                 /*FileStream类构造函数
  12.                  * 参数1:指定路径
  13.                  * 参数2:创建模式 ->Open:打开现有文件;OpenOrCreate:打开一个文件,若不存在则创建一个新的文件。
  14.                  * 参数3:读/写权限 ->Read:读取访问权限;Write:写入访问权限*/
  15.                 FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
  16.                 FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
  17.                
  18.                 fout.SetLength(0); //清空文件,设置fout的长度为0

  19.                 mydes.Key = GetLegalKey(); //获取密钥
  20.                 mydes.IV = GetLegalIV();  //获取初始化向量

  21.                 byte[] bin = new byte[100]; //暂时存放fin中获取的数据
  22.                 long rdlen = 0; //初始读入长度为0
  23.                 long totlen = fin.Length; //fin的长度
  24.                 int len;
  25.                 ICryptoTransform encrypto = mydes.CreateEncryptor(); //创建对称加密器对象
  26.                 CryptoStream cs = new CryptoStream(fout, encrypto, CryptoStreamMode.Write); //将数据流(fout)链接到加密转换的流(encrypto)
  27.                 while (rdlen < totlen)
  28.                 {
  29.                     len = fin.Read(bin, 0, 100); //从流(fin)中读取字节块并将该数据(bin)写入给定缓冲区中
  30.                     cs.Write(bin, 0, len); //将一个字节序列(bin)写入当前 CryptoStream(cs),并将流中的当前位置提升写入的字节数
  31.                     rdlen = rdlen + len; //读入长度+len
  32.                 }
  33.                 /*关闭流*/
  34.                 cs.Close();
  35.                 fout.Close();
  36.                 fin.Close();

  37.             }
  38.             catch (Exception ex)
  39.             {
  40.                 throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
  41.             }
  42.         }
复制代码
  第二个为文件的解密方法函数,所含参数1为待解密文件的路径,参数2为待解密后文件的输出路径。(具体解析同上)

  3.由上述分析可知,应提供待加密文件、待加密后文件输出、待解密文件、待解密后文件输出的路径。故可以通过Console.Readline()获取文件路径。
  4.最后,将获取的文件路径传入函数执行即可。

四、源代码【仅包含主程序代码,引用了TripleDES_类】:
  1. using System;

  2. namespace _3DES
  3. {
  4.     class Program
  5.     {
  6.         static void Main(string[] args)
  7.         {
  8.             string cokey = "tkGGRmBErvc=";
  9.             TripleDES_ tri = new TripleDES_(cokey);
  10.             Console.Write("请输入此桌面上需要加密的文件名:");
  11.             string inFileName = @"C:\Users\winni\Desktop" + Console.ReadLine() + ".txt";
  12.             Console.Write("请输入加密后存放的文件名:");
  13.             string outFileName = @"C:\Users\winni\Desktop" + Console.ReadLine() + ".txt";
  14.             Console.Write("请输入解密后存放的文件名:");
  15.             string finalFileName = @"C:\Users\winni\Desktop" + Console.ReadLine() + ".txt";
  16.             tri.Encrypt(inFileName, outFileName);
  17.             tri.Decrypt(outFileName, finalFileName);

  18.         }
  19.     }
  20. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

教学服务系统

GMT+8, 2025-4-30 08:04 , Processed in 0.014342 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表