教学服务系统

 找回密码
 立即注册
搜索
查看: 616|回复: 1

信息计算2019级2班26号何祥宝

[复制链接]

8

主题

17

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2022-4-16 09:36:59 | 显示全部楼层 |阅读模式
思路:
将密钥赋值给key,将明文传入Encrypt得到密文“a”,输出密文“a”,再将密文“a”解密得明文“b”,输出明文“b”

运行代码:
  1. namespace DES_3 {
  2.     class Program {
  3.         static void Main(string[] args)
  4.         {
  5.             string key = "he+xiang+bao+0226=123";
  6.             TripleDES_ DES_3= new TripleDES_(key);
  7.             string a = DES_3.Encrypt("asdfsadfsdaf");
  8.             Console.WriteLine(a);
  9.             string b = DES_3.Decrypt(a);
  10.             Console.WriteLine(b);
  11.         }
  12.     }
  13. }
复制代码
  1. using System.Text;
  2. using System.Security.Cryptography;

  3. /**//// <summary>
  4.     /// 三重DES
  5.     /// </summary>
  6. public class TripleDES_
  7. {
  8.     private TripleDES mydes;
  9.     public string Key;
  10.     public string IV;
  11.     /**//// <summary>
  12.         /// 对称加密类的构造函数
  13.         /// </summary>
  14.     public TripleDES_(string key)
  15.     {
  16.         mydes = new TripleDESCryptoServiceProvider();
  17.         Key = key;
  18.         IV = "#$^%&&*Yisifhsfjsljfslhgosdshf26382837sdfjskhf97(*&(*";
  19.     }
  20.     /**//// <summary>
  21.         /// 对称加密类的构造函数
  22.         /// </summary>
  23.     public TripleDES_(string key, string iv)
  24.     {
  25.         mydes = new TripleDESCryptoServiceProvider();
  26.         Key = key;
  27.         IV = iv;
  28.     }
  29.     /**//// <summary>
  30.         /// 获得密钥
  31.         /// </summary>
  32.         /// <returns>密钥</returns>
  33.     private byte[] GetLegalKey()
  34.     {
  35.         string sTemp = Key;
  36.         mydes.GenerateKey();
  37.         byte[] bytTemp = mydes.Key;
  38.         int KeyLength = bytTemp.Length;
  39.         if (sTemp.Length > KeyLength)
  40.             sTemp = sTemp.Substring(0, KeyLength);
  41.         else if (sTemp.Length < KeyLength)
  42.             sTemp = sTemp.PadRight(KeyLength, ' ');
  43.         return ASCIIEncoding.ASCII.GetBytes(sTemp);
  44.     }
  45.     /**//// <summary>
  46.         /// 获得初始向量IV
  47.         /// </summary>
  48.         /// <returns>初试向量IV</returns>
  49.     private byte[] GetLegalIV()
  50.     {
  51.         string sTemp = IV;
  52.         mydes.GenerateIV();
  53.         byte[] bytTemp = mydes.IV;
  54.         int IVLength = bytTemp.Length;
  55.         if (sTemp.Length > IVLength)
  56.             sTemp = sTemp.Substring(0, IVLength);
  57.         else if (sTemp.Length < IVLength)
  58.             sTemp = sTemp.PadRight(IVLength, ' ');
  59.         return ASCIIEncoding.ASCII.GetBytes(sTemp);
  60.     }
  61.     /**//// <summary>
  62.         /// 加密方法
  63.         /// </summary>
  64.         /// <param name="Source">待加密的串</param>
  65.         /// <returns>经过加密的串</returns>
  66.     public string Encrypt(string Source)
  67.     {
  68.         try
  69.         {
  70.             byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
  71.             MemoryStream ms = new MemoryStream();
  72.             mydes.Key = GetLegalKey();
  73.             mydes.IV = GetLegalIV();
  74.             ICryptoTransform encrypto = mydes.CreateEncryptor();
  75.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
  76.             cs.Write(bytIn, 0, bytIn.Length);
  77.             cs.FlushFinalBlock();
  78.             ms.Close();
  79.             byte[] bytOut = ms.ToArray();
  80.             return Convert.ToBase64String(bytOut);
  81.         }
  82.         catch (Exception ex)
  83.         {
  84.             throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
  85.         }
  86.     }
  87.     /**//// <summary>
  88.         /// 解密方法
  89.         /// </summary>
  90.         /// <param name="Source">待解密的串</param>
  91.         /// <returns>经过解密的串</returns>
  92.     public string Decrypt(string Source)
  93.     {
  94.         try
  95.         {
  96.             byte[] bytIn = Convert.FromBase64String(Source);
  97.             MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
  98.             mydes.Key = GetLegalKey();
  99.             mydes.IV = GetLegalIV();
  100.             ICryptoTransform encrypto = mydes.CreateDecryptor();
  101.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
  102.             StreamReader sr = new StreamReader(cs);
  103.             return sr.ReadToEnd();
  104.         }
  105.         catch (Exception ex)
  106.         {
  107.             throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message);
  108.         }

  109.     }
  110. }
复制代码





运行结果:




本帖子中包含更多资源

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

x
回复

使用道具 举报

8

主题

17

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2022-4-16 09:40:10 | 显示全部楼层
运行思路:
因为要传入的明文是byte型,所以将接受到的明文字符串转换成byte型再传入。
运行代码:
  1. namespace DES_3
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             string key = "he+xiang+bao+0226=123";
  8.             TripleDES_ DES_3 = new TripleDES_(key);
  9.             string str = "as5sad894sdf";
  10.             byte[] a = System.Text.Encoding.Default.GetBytes(str);
  11.             byte[] b = DES_3.Encrypt(a);
  12.             string e = System.Text.Encoding.Default.GetString(b);
  13.             Console.WriteLine(e);
  14.             byte[] c = DES_3.Decrypt(b);
  15.             string d = System.Text.Encoding.Default.GetString(c);
  16.             Console.WriteLine(d);
  17.         }
  18.     }
  19. }
复制代码
  1. using System.Text;
  2. using System.Security.Cryptography;



  3. /**//// <summary>
  4.     /// 三重DES
  5.     /// </summary>
  6. public class TripleDES_
  7. {
  8.     private TripleDES mydes;
  9.     public string Key;
  10.     public string IV;
  11.     /**//// <summary>
  12.         /// 对称加密类的构造函数
  13.         /// </summary>
  14.     public TripleDES_(string key)
  15.     {
  16.         mydes = new TripleDESCryptoServiceProvider();
  17.         Key = key;
  18.         IV = "#$^%&&*Yisifhsfjsljfslhgosdshf26382837sdfjskhf97(*&(*";
  19.     }
  20.     /**//// <summary>
  21.         /// 对称加密类的构造函数
  22.         /// </summary>
  23.     public TripleDES_(string key, string iv)
  24.     {
  25.         mydes = new TripleDESCryptoServiceProvider();
  26.         Key = key;
  27.         IV = iv;
  28.     }
  29.     /**//// <summary>
  30.         /// 获得密钥
  31.         /// </summary>
  32.         /// <returns>密钥</returns>
  33.     private byte[] GetLegalKey()
  34.     {
  35.         string sTemp = Key;
  36.         mydes.GenerateKey();
  37.         byte[] bytTemp = mydes.Key;
  38.         int KeyLength = bytTemp.Length;
  39.         if (sTemp.Length > KeyLength)
  40.             sTemp = sTemp.Substring(0, KeyLength);
  41.         else if (sTemp.Length < KeyLength)
  42.             sTemp = sTemp.PadRight(KeyLength, ' ');
  43.         return ASCIIEncoding.ASCII.GetBytes(sTemp);
  44.     }
  45.     /**//// <summary>
  46.         /// 获得初始向量IV
  47.         /// </summary>
  48.         /// <returns>初试向量IV</returns>
  49.     private byte[] GetLegalIV()
  50.     {
  51.         string sTemp = IV;
  52.         mydes.GenerateIV();
  53.         byte[] bytTemp = mydes.IV;
  54.         int IVLength = bytTemp.Length;
  55.         if (sTemp.Length > IVLength)
  56.             sTemp = sTemp.Substring(0, IVLength);
  57.         else if (sTemp.Length < IVLength)
  58.             sTemp = sTemp.PadRight(IVLength, ' ');
  59.         return ASCIIEncoding.ASCII.GetBytes(sTemp);
  60.     }


  61.     /**//// <summary>
  62.         /// 加密方法byte[] to byte[]
  63.         /// </summary>
  64.         /// <param name="Source">待加密的byte数组</param>
  65.         /// <returns>经过加密的byte数组</returns>
  66.     public byte[] Encrypt(byte[] Source)
  67.     {
  68.         try
  69.         {
  70.             byte[] bytIn = Source;
  71.             MemoryStream ms = new MemoryStream();
  72.             mydes.Key = GetLegalKey();
  73.             mydes.IV = GetLegalIV();
  74.             ICryptoTransform encrypto = mydes.CreateEncryptor();
  75.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
  76.             cs.Write(bytIn, 0, bytIn.Length);
  77.             cs.FlushFinalBlock();
  78.             ms.Close();
  79.             byte[] bytOut = ms.ToArray();
  80.             return bytOut;
  81.         }
  82.         catch (Exception ex)
  83.         {
  84.             throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
  85.         }
  86.     }
  87.     /**//// <summary>
  88.         /// 解密方法byte[] to byte[]
  89.         /// </summary>
  90.         /// <param name="Source">待解密的byte数组</param>
  91.         /// <returns>经过解密的byte数组</returns>
  92.     public byte[] Decrypt(byte[] Source)
  93.     {
  94.         try
  95.         {
  96.             byte[] bytIn = Source;
  97.             MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
  98.             mydes.Key = GetLegalKey();
  99.             mydes.IV = GetLegalIV();
  100.             ICryptoTransform encrypto = mydes.CreateDecryptor();
  101.             CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
  102.             StreamReader sr = new StreamReader(cs);
  103.             return UTF8Encoding.UTF8.GetBytes(sr.ReadToEnd());
  104.         }
  105.         catch (Exception ex)
  106.         {
  107.             throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message);
  108.         }
  109.     }
  110. }
复制代码
运行结果:





本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

教学服务系统

GMT+8, 2025-4-30 14:03 , Processed in 0.017564 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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