教学服务系统

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

信息计算2019级1班21号杨宇

[复制链接]

10

主题

19

帖子

134

积分

注册会员

Rank: 2

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

  157.         /**//// <summary>
  158.         /// 加密方法File to File
  159.         /// </summary>
  160.         /// <param name="inFileName">待加密文件的路径</param>
  161.         /// <param name="outFileName">待加密后文件的输出路径</param>

  162.         public void Encrypt(string inFileName, string outFileName)
  163.         {
  164.             try
  165.             {

  166.                 FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
  167.                 FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
  168.                 fout.SetLength(0);

  169.                 mydes.Key = GetLegalKey();
  170.                 mydes.IV = GetLegalIV();

  171.                 byte[] bin = new byte[100];
  172.                 long rdlen = 0;
  173.                 long totlen = fin.Length;
  174.                 int len;

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

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

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

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

  227.     }
复制代码
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;

  6. namespace TriDES
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             string key = "yayayayayaya";
  13.             TripleDES_ tripleDES_ = new TripleDES_(key);
  14.             Console.WriteLine("需要加密的文件:");
  15.             string inFile = @"C:\Users\name\Desktop" + Console.ReadLine() + ".txt";
  16.             Console.WriteLine("加密后的文件:");
  17.             string miFile = @"C:\Users\name\Desktop" + Console.ReadLine() + ".txt";
  18.             Console.WriteLine("解密后的文件:");
  19.             string outFile = @"C:\Users\name\Desktop" + Console.ReadLine() + ".txt";
  20.             tripleDES_.Encrypt(inFile,miFile);
  21.             tripleDES_.Decrypt(miFile, outFile);
  22.         }
  23.     }
  24. }
复制代码

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

教学服务系统

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

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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