|

楼主 |
发表于 2022-4-16 09:40:10
|
显示全部楼层
运行思路:
因为要传入的明文是byte型,所以将接受到的明文字符串转换成byte型再传入。
运行代码:- namespace DES_3
- {
- class Program
- {
- static void Main(string[] args)
- {
- string key = "he+xiang+bao+0226=123";
- TripleDES_ DES_3 = new TripleDES_(key);
- string str = "as5sad894sdf";
- byte[] a = System.Text.Encoding.Default.GetBytes(str);
- byte[] b = DES_3.Encrypt(a);
- string e = System.Text.Encoding.Default.GetString(b);
- Console.WriteLine(e);
- byte[] c = DES_3.Decrypt(b);
- string d = System.Text.Encoding.Default.GetString(c);
- Console.WriteLine(d);
- }
- }
- }
复制代码- using System.Text;
- using System.Security.Cryptography;
- /**//// <summary>
- /// 三重DES
- /// </summary>
- public class TripleDES_
- {
- private TripleDES mydes;
- public string Key;
- public string IV;
- /**//// <summary>
- /// 对称加密类的构造函数
- /// </summary>
- public TripleDES_(string key)
- {
- mydes = new TripleDESCryptoServiceProvider();
- Key = key;
- IV = "#$^%&&*Yisifhsfjsljfslhgosdshf26382837sdfjskhf97(*&(*";
- }
- /**//// <summary>
- /// 对称加密类的构造函数
- /// </summary>
- public TripleDES_(string key, string iv)
- {
- mydes = new TripleDESCryptoServiceProvider();
- Key = key;
- IV = iv;
- }
- /**//// <summary>
- /// 获得密钥
- /// </summary>
- /// <returns>密钥</returns>
- private byte[] GetLegalKey()
- {
- string sTemp = Key;
- mydes.GenerateKey();
- byte[] bytTemp = mydes.Key;
- int KeyLength = bytTemp.Length;
- if (sTemp.Length > KeyLength)
- sTemp = sTemp.Substring(0, KeyLength);
- else if (sTemp.Length < KeyLength)
- sTemp = sTemp.PadRight(KeyLength, ' ');
- return ASCIIEncoding.ASCII.GetBytes(sTemp);
- }
- /**//// <summary>
- /// 获得初始向量IV
- /// </summary>
- /// <returns>初试向量IV</returns>
- private byte[] GetLegalIV()
- {
- string sTemp = IV;
- mydes.GenerateIV();
- byte[] bytTemp = mydes.IV;
- int IVLength = bytTemp.Length;
- if (sTemp.Length > IVLength)
- sTemp = sTemp.Substring(0, IVLength);
- else if (sTemp.Length < IVLength)
- sTemp = sTemp.PadRight(IVLength, ' ');
- return ASCIIEncoding.ASCII.GetBytes(sTemp);
- }
- /**//// <summary>
- /// 加密方法byte[] to byte[]
- /// </summary>
- /// <param name="Source">待加密的byte数组</param>
- /// <returns>经过加密的byte数组</returns>
- public byte[] Encrypt(byte[] Source)
- {
- try
- {
- byte[] bytIn = Source;
- MemoryStream ms = new MemoryStream();
- mydes.Key = GetLegalKey();
- mydes.IV = GetLegalIV();
- ICryptoTransform encrypto = mydes.CreateEncryptor();
- CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
- cs.Write(bytIn, 0, bytIn.Length);
- cs.FlushFinalBlock();
- ms.Close();
- byte[] bytOut = ms.ToArray();
- return bytOut;
- }
- catch (Exception ex)
- {
- throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message);
- }
- }
- /**//// <summary>
- /// 解密方法byte[] to byte[]
- /// </summary>
- /// <param name="Source">待解密的byte数组</param>
- /// <returns>经过解密的byte数组</returns>
- public byte[] Decrypt(byte[] Source)
- {
- try
- {
- byte[] bytIn = Source;
- MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
- mydes.Key = GetLegalKey();
- mydes.IV = GetLegalIV();
- ICryptoTransform encrypto = mydes.CreateDecryptor();
- CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
- StreamReader sr = new StreamReader(cs);
- return UTF8Encoding.UTF8.GetBytes(sr.ReadToEnd());
- }
- catch (Exception ex)
- {
- throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message);
- }
- }
- }
复制代码 运行结果:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|