教学服务系统

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

信息计算2019级1班1号原野

[复制链接]

10

主题

19

帖子

106

积分

注册会员

Rank: 2

积分
106
发表于 2022-4-16 15:11:57 | 显示全部楼层 |阅读模式
本帖最后由 1班1号原野 于 2022-4-16 15:16 编辑

1.我的认识:3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法。以下代码为DES加密解密算法,里面包含了对txt文本文件的加密和解密,c#类封装的DES加密解密,可以使用默认秘钥进行加密、解密,也可以自定义秘钥进行加密、解密,调用简单方便。主要用于私人重要的或者隐私文件进行加解密考虑数据安全,防止数据泄漏。2.代码部分:以下为一些加密、解密以及获得密钥、对称加密类的构造函数的方法:
  1.     /// 三重DES
  2. public class TripleDES_
  3. {
  4.     private TripleDES mydes;
  5.     public string Key;
  6.     public string IV;
  7.         /// 对称加密类的构造函数
  8.     public TripleDES_(string key)
  9.     {
  10.         mydes = new TripleDESCryptoServiceProvider();
  11.         Key = key;
  12.         IV = "#$^%&&*Yisifhsfjsljfslhgosdshf26382837sdfjskhf97(*&(*";
  13.     }
  14.         /// 对称加密类的构造函数
  15.     public TripleDES_(string key, string iv)
  16.     {
  17.         mydes = new TripleDESCryptoServiceProvider();
  18.         Key = key;
  19.         IV = iv;
  20.     }
  21.         /// 获得密钥
  22.         /// <returns>密钥</returns>
  23.     private byte[] GetLegalKey()
  24.     {
  25.         string sTemp = Key;
  26.         mydes.GenerateKey();
  27.         byte[] bytTemp = mydes.Key;
  28.         int KeyLength = bytTemp.Length;
  29.         if (sTemp.Length > KeyLength)
  30.             sTemp = sTemp.Substring(0, KeyLength);
  31.         else if (sTemp.Length < KeyLength)
  32.             sTemp = sTemp.PadRight(KeyLength, ' ');
  33.         return ASCIIEncoding.ASCII.GetBytes(sTemp);
  34.     }
  35.         /// 获得初始向量IV
  36.         /// <returns>初试向量IV</returns>
  37.     private byte[] GetLegalIV()
  38.     {
  39.         string sTemp = IV;
  40.         mydes.GenerateIV();
  41.         byte[] bytTemp = mydes.IV;
  42.         int IVLength = bytTemp.Length;
  43.         if (sTemp.Length > IVLength)
  44.             sTemp = sTemp.Substring(0, IVLength);
  45.         else if (sTemp.Length < IVLength)
  46.             sTemp = sTemp.PadRight(IVLength, ' ');
  47.         return ASCIIEncoding.ASCII.GetBytes(sTemp);
  48.     }
  49.         /// 加密方法
  50.         /// <param name="Source">待加密的串</param>
  51.         /// <returns>经过加密的串</returns>
  52.     public string Encrypt(string Source)
  53.     {
  54.         try
  55.         {
  56.             byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
  57.             MemoryStream ms = new MemoryStream();
  58.             mydes.Key = GetLegalKey();
  59.             mydes.IV = GetLegalIV();
  60.             ICryptoTransform encrypto = mydes.CreateEncryptor();
  61.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
  62.             cs.Write(bytIn, 0, bytIn.Length);
  63.             cs.FlushFinalBlock();
  64.             ms.Close();
  65.             byte[] bytOut = ms.ToArray();
  66.             return Convert.ToBase64String(bytOut);
  67.         }
  68.         catch (Exception ex)
  69.         {
  70.             throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
  71.         }
  72.     }
  73.         /// 解密方法
  74.         /// <param name="Source">待解密的串</param>
  75.         /// <returns>经过解密的串</returns>
  76.     public string Decrypt(string Source)
  77.     {
  78.         try
  79.         {
  80.             byte[] bytIn = Convert.FromBase64String(Source);
  81.             MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
  82.             mydes.Key = GetLegalKey();
  83.             mydes.IV = GetLegalIV();
  84.             ICryptoTransform encrypto = mydes.CreateDecryptor();
  85.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
  86.             StreamReader sr = new StreamReader(cs);
  87.             return sr.ReadToEnd();
  88.         }
  89.         catch (Exception ex)
  90.         {
  91.             throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message);
  92.         }
  93.     }
  94.         /// 加密方法byte[] to byte[]
  95.         /// <param name="Source">待加密的byte数组</param>
  96.         /// <returns>经过加密的byte数组</returns>
  97.     public byte[] Encrypt(byte[] Source)
  98.     {
  99.         try
  100.         {
  101.             byte[] bytIn = Source;
  102.             MemoryStream ms = new MemoryStream();
  103.             mydes.Key = GetLegalKey();
  104.             mydes.IV = GetLegalIV();
  105.             ICryptoTransform encrypto = mydes.CreateEncryptor();
  106.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
  107.             cs.Write(bytIn, 0, bytIn.Length);
  108.             cs.FlushFinalBlock();
  109.             ms.Close();
  110.             byte[] bytOut = ms.ToArray();
  111.             return bytOut;
  112.         }
  113.         catch (Exception ex)
  114.         {
  115.             throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
  116.         }
  117.     }
  118.         /// 解密方法byte[] to byte[]
  119.         /// <param name="Source">待解密的byte数组</param>
  120.         /// <returns>经过解密的byte数组</returns>
  121.     public byte[] Decrypt(byte[] Source)
  122.     {
  123.         try
  124.         {
  125.             byte[] bytIn = Source;
  126.             MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
  127.             mydes.Key = GetLegalKey();
  128.             mydes.IV = GetLegalIV();
  129.             ICryptoTransform encrypto = mydes.CreateDecryptor();
  130.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
  131.             StreamReader sr = new StreamReader(cs);
  132.             return UTF8Encoding.UTF8.GetBytes(sr.ReadToEnd());
  133.         }
  134.         catch (Exception ex)
  135.         {
  136.             throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message);
  137.         }
  138.     }
  139.         /// 加密方法File to File
  140.         /// <param name="inFileName">待加密文件的路径</param>
  141.         /// <param name="outFileName">待加密后文件的输出路径</param>
  142.     public void Encrypt(string inFileName, string outFileName)
  143.     {
  144.         try
  145. {
  146.             FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
  147.             FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
  148.             fout.SetLength(0);
  149.             mydes.Key = GetLegalKey();
  150.             mydes.IV = GetLegalIV();
  151.             byte[] bin = new byte[100];
  152.             long rdlen = 0;
  153.             long totlen = fin.Length;
  154.             int len;
  155.             ICryptoTransform encrypto = mydes.CreateEncryptor();
  156.             CryptoStream cs = new CryptoStream(fout, encrypto, CryptoStreamMode.Write);
  157.             while (rdlen < totlen)
  158.             {
  159.                 len = fin.Read(bin, 0, 100);
  160.                 cs.Write(bin, 0, len);
  161.                 rdlen = rdlen + len;
  162.             }
  163.             cs.Close();
  164.             fout.Close();
  165.             fin.Close();
  166.         }
  167.         catch (Exception ex)
  168.         {
  169.             throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
  170.         }
  171.     }
  172.         /// 解密方法File to File
  173.         /// <param name="inFileName">待解密文件的路径</param>
  174.         /// <param name="outFileName">待解密后文件的输出路径</param>
  175.     public void Decrypt(string inFileName, string outFileName)
  176.     {
  177.         try
  178.         {
  179.             FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
  180.             FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
  181.             fout.SetLength(0);
  182.             byte[] bin = new byte[100];
  183.             long rdlen = 0;
  184.             long totlen = fin.Length;
  185.             int len;
  186.             mydes.Key = GetLegalKey();
  187.             mydes.IV = GetLegalIV();
  188.             ICryptoTransform encrypto = mydes.CreateDecryptor();
  189.             CryptoStream cs = new CryptoStream(fout, encrypto, CryptoStreamMode.Write);
  190.             while (rdlen < totlen)
  191.             {
  192.                 len = fin.Read(bin, 0, 100);
  193.                 cs.Write(bin, 0, len);
  194.                 rdlen = rdlen + len;
  195.             }
  196.             cs.Close();
  197.             fout.Close();
  198.             fin.Close();
  199. }catch (Exception ex)
  200.         {throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message);}}}
复制代码
以下为program:
  1. {class yyyy
  2.     {static void Main(string[] args)
  3.         {string cokey = "cjskcnsi=";
  4.             TripleDES_ yy = new TripleDES_(cokey);
  5.             Console.WriteLine("请输入此桌面上需要加密的文件名:\n");
  6.             string inFileName = @"C:\Users\DELL\Desktop" + Console.ReadLine() + ".txt";
  7.             Console.WriteLine("请输入机密后存放文件的文件名:\n");
  8.             string outFileName = @"C:\Users\DELL\Desktop" + Console.ReadLine() + ".txt";
  9.             Console.WriteLine("请输入解密后存放文件的文件名:\n");
  10.             string finalFileName = @"C:\Users\DELL\Desktop" + Console.ReadLine();
  11.             yy.Encrypt(inFileName, outFileName);
  12.             yy.Decrypt(outFileName, finalFileName);
  13.         }}}
复制代码
3.运行截图:其中1班1号原野1为原文档,1班1号原野2为加密之后的,1班1号原野3为解密之后的

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

教学服务系统

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

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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