教学服务系统

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

信息计算2019级1班13号郝怀宇

[复制链接]

9

主题

19

帖子

117

积分

注册会员

Rank: 2

积分
117
发表于 2022-4-15 23:32:50 | 显示全部楼层 |阅读模式
1.创建一个txt文件,填入需要加密的内容,主函数如下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;


  6. namespace haohuaiyu
  7. {
  8.     class hhy
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             string cokey = "juyreajskj=";
  13.             TripleDES_ tri = new TripleDES_(cokey);
  14.             Console.Write("需要加密的文件名:\n");
  15.             string inFileName = @"C:\Users\hhy\Desktop" + Console.ReadLine() + ".txt";
  16.             Console.Write("加密后文件名:\n");
  17.             string outFileName = @"C:\Users\hhy\Desktop" + Console.ReadLine() + ".txt";
  18.             Console.Write("解密后文件名:\n");
  19.             string finalFileName = @"C:\Users\hhy\Desktop" + Console.ReadLine() + ".txt";
  20.             tri.Encrypt(inFileName, outFileName);
  21.             tri.Decrypt(outFileName, finalFileName);

  22.         }
  23.     }
  24. }
复制代码
2.调用的代码:
  1. /**/using System;
  2. using System.IO;
  3. using System.Security.Cryptography;
  4. using System.Text;
  5. /// <summary>
  6. /// 三重DES
  7. /// </summary>
  8. public class TripleDES_
  9. {
  10.     private TripleDES mydes;
  11.     public string Key;
  12.     public string IV;
  13.     /**//// <summary>
  14.         /// 对称加密类的构造函数
  15.         /// </summary>
  16.     public TripleDES_(string key)
  17.     {
  18.         mydes = new TripleDESCryptoServiceProvider();
  19.         Key = key;
  20.         IV = "#$^%&&*Yisifhsfjsljfslhgosdshf26382837sdfjskhf97(*&(*";
  21.     }
  22.     /**//// <summary>
  23.         /// 对称加密类的构造函数
  24.         /// </summary>
  25.     public TripleDES_(string key, string iv)
  26.     {
  27.         mydes = new TripleDESCryptoServiceProvider();
  28.         Key = key;
  29.         IV = iv;
  30.     }
  31.     /**//// <summary>
  32.         /// 获得密钥
  33.         /// </summary>
  34.         /// <returns>密钥</returns>
  35.     private byte[] GetLegalKey()
  36.     {
  37.         string sTemp = Key;
  38.         mydes.GenerateKey();
  39.         byte[] bytTemp = mydes.Key;
  40.         int KeyLength = bytTemp.Length;
  41.         if (sTemp.Length > KeyLength)
  42.             sTemp = sTemp.Substring(0, KeyLength);
  43.         else if (sTemp.Length < KeyLength)
  44.             sTemp = sTemp.PadRight(KeyLength, ' ');
  45.         return ASCIIEncoding.ASCII.GetBytes(sTemp);
  46.     }
  47.     /**//// <summary>
  48.         /// 获得初始向量IV
  49.         /// </summary>
  50.         /// <returns>初试向量IV</returns>
  51.     private byte[] GetLegalIV()
  52.     {
  53.         string sTemp = IV;
  54.         mydes.GenerateIV();
  55.         byte[] bytTemp = mydes.IV;
  56.         int IVLength = bytTemp.Length;
  57.         if (sTemp.Length > IVLength)
  58.             sTemp = sTemp.Substring(0, IVLength);
  59.         else if (sTemp.Length < IVLength)
  60.             sTemp = sTemp.PadRight(IVLength, ' ');
  61.         return ASCIIEncoding.ASCII.GetBytes(sTemp);
  62.     }
  63.     /**//// <summary>
  64.         /// 加密方法
  65.         /// </summary>
  66.         /// <param name="Source">待加密的串</param>
  67.         /// <returns>经过加密的串</returns>
  68.     public string Encrypt(string Source)
  69.     {
  70.         try
  71.         {
  72.             byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
  73.             MemoryStream ms = new MemoryStream();
  74.             mydes.Key = GetLegalKey();
  75.             mydes.IV = GetLegalIV();
  76.             ICryptoTransform encrypto = mydes.CreateEncryptor();
  77.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
  78.             cs.Write(bytIn, 0, bytIn.Length);
  79.             cs.FlushFinalBlock();
  80.             ms.Close();
  81.             byte[] bytOut = ms.ToArray();
  82.             return Convert.ToBase64String(bytOut);
  83.         }
  84.         catch (Exception ex)
  85.         {
  86.             throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
  87.         }
  88.     }
  89.     /**//// <summary>
  90.         /// 解密方法
  91.         /// </summary>
  92.         /// <param name="Source">待解密的串</param>
  93.         /// <returns>经过解密的串</returns>
  94.     public string Decrypt(string Source)
  95.     {
  96.         try
  97.         {
  98.             byte[] bytIn = Convert.FromBase64String(Source);
  99.             MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
  100.             mydes.Key = GetLegalKey();
  101.             mydes.IV = GetLegalIV();
  102.             ICryptoTransform encrypto = mydes.CreateDecryptor();
  103.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
  104.             StreamReader sr = new StreamReader(cs);
  105.             return sr.ReadToEnd();
  106.         }
  107.         catch (Exception ex)
  108.         {
  109.             throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message);
  110.         }
  111.     }
  112.     /**//// <summary>
  113.         /// 加密方法byte[] to byte[]
  114.         /// </summary>
  115.         /// <param name="Source">待加密的byte数组</param>
  116.         /// <returns>经过加密的byte数组</returns>
  117.     public byte[] Encrypt(byte[] Source)
  118.     {
  119.         try
  120.         {
  121.             byte[] bytIn = Source;
  122.             MemoryStream ms = new MemoryStream();
  123.             mydes.Key = GetLegalKey();
  124.             mydes.IV = GetLegalIV();
  125.             ICryptoTransform encrypto = mydes.CreateEncryptor();
  126.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
  127.             cs.Write(bytIn, 0, bytIn.Length);
  128.             cs.FlushFinalBlock();
  129.             ms.Close();
  130.             byte[] bytOut = ms.ToArray();
  131.             return bytOut;
  132.         }
  133.         catch (Exception ex)
  134.         {
  135.             throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
  136.         }
  137.     }
  138.     /**//// <summary>
  139.         /// 解密方法byte[] to byte[]
  140.         /// </summary>
  141.         /// <param name="Source">待解密的byte数组</param>
  142.         /// <returns>经过解密的byte数组</returns>
  143.     public byte[] Decrypt(byte[] Source)
  144.     {
  145.         try
  146.         {
  147.             byte[] bytIn = Source;
  148.             MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
  149.             mydes.Key = GetLegalKey();
  150.             mydes.IV = GetLegalIV();
  151.             ICryptoTransform encrypto = mydes.CreateDecryptor();
  152.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
  153.             StreamReader sr = new StreamReader(cs);
  154.             return UTF8Encoding.UTF8.GetBytes(sr.ReadToEnd());
  155.         }
  156.         catch (Exception ex)
  157.         {
  158.             throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message);
  159.         }
  160.     }

  161.     /**//// <summary>
  162.         /// 加密方法File to File
  163.         /// </summary>
  164.         /// <param name="inFileName">待加密文件的路径</param>
  165.         /// <param name="outFileName">待加密后文件的输出路径</param>

  166.     public void Encrypt(string inFileName, string outFileName)
  167.     {
  168.         try
  169.         {

  170.             FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
  171.             FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
  172.             fout.SetLength(0);

  173.             mydes.Key = GetLegalKey();
  174.             mydes.IV = GetLegalIV();

  175.             byte[] bin = new byte[100];
  176.             long rdlen = 0;
  177.             long totlen = fin.Length;
  178.             int len;

  179.             ICryptoTransform encrypto = mydes.CreateEncryptor();
  180.             CryptoStream cs = new CryptoStream(fout, encrypto, CryptoStreamMode.Write);
  181.             while (rdlen < totlen)
  182.             {
  183.                 len = fin.Read(bin, 0, 100);
  184.                 cs.Write(bin, 0, len);
  185.                 rdlen = rdlen + len;
  186.             }
  187.             cs.Close();
  188.             fout.Close();
  189.             fin.Close();

  190.         }
  191.         catch (Exception ex)
  192.         {
  193.             throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
  194.         }
  195.     }
  196.     /**//// <summary>
  197.         /// 解密方法File to File
  198.         /// </summary>
  199.         /// <param name="inFileName">待解密文件的路径</param>
  200.         /// <param name="outFileName">待解密后文件的输出路径</param>
  201.     public void Decrypt(string inFileName, string outFileName)
  202.     {
  203.         try
  204.         {
  205.             FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
  206.             FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
  207.             fout.SetLength(0);

  208.             byte[] bin = new byte[100];
  209.             long rdlen = 0;
  210.             long totlen = fin.Length;
  211.             int len;
  212.             mydes.Key = GetLegalKey();
  213.             mydes.IV = GetLegalIV();
  214.             ICryptoTransform encrypto = mydes.CreateDecryptor();
  215.             CryptoStream cs = new CryptoStream(fout, encrypto, CryptoStreamMode.Write);
  216.             while (rdlen < totlen)
  217.             {
  218.                 len = fin.Read(bin, 0, 100);
  219.                 cs.Write(bin, 0, len);
  220.                 rdlen = rdlen + len;
  221.             }
  222.             cs.Close();
  223.             fout.Close();
  224.             fin.Close();

  225.         }
  226.         catch (Exception ex)
  227.         {
  228.             throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message);
  229.         }
  230.     }

  231. }
复制代码
3.运行截图:

4.运行结果:

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

教学服务系统

GMT+8, 2025-4-30 07:53 , Processed in 0.016086 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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