• 转摘一个可逆加密的类(使用3DES加密)


    一、提要

    命名空间:System.Security.Cryptography.TripleDES

    简单说明: 表示三重数据加密标准算法的基类,TripleDES 的所有实现都必须从此基类派生。是从 SymmetricAlgorithm 类里继承出来。TripleDES 使用 DES 算法的三次连续迭代。它可以使用两个或三个 56 位密钥。

           使用目的:比较安全的加密一种方式,密钥和矢量的不同,会生产不同的加密字串。因为是DES算法的三次连续迭代,而且算法可逆,这样对于数据保密性和可恢复性都不错。

    二、代码示例

    本代码参照了部分MSDN上的代码示例,再根据自己的实际情况,补充了一部分MSDN上没有提到的内容

    using System;

    using System.Security;

    using System.Security.Cryptography;

    using System.IO;

    using System.Text;

    using System.Threading;

    namespace TRIP3DES

    {

        /// <summary>

        /// Class1 的摘要说明。

        /// </summary>

        public class dllEncrypt

        {

          //密钥

          private const string sKey = "qJzGEh6hESZDVJeCnFPGuxzaiB7NLQM3";

          //矢量,矢量可以为空

          private const string sIV = "qcDY6X+aPLw=";

          //构造一个对称算法

          private SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();

            public dllEncrypt(){}

          #region public string EncryptString(string Value)

          /// <summary>

          /// 加密字符串

          /// </summary>

          /// <param name="Value">输入的字符串</param>

          /// <returns>加密后的字符串</returns>

          public string EncryptString(string Value)

          {

             ICryptoTransform ct;

             MemoryStream ms;

             CryptoStream cs;

             byte[] byt;

             mCSP.Key = Convert.FromBase64String(sKey);

             mCSP.IV = Convert.FromBase64String(sIV);

             //指定加密的运算模式

             mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;

            //获取或设置加密算法的填充模式

             mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

             ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);

             byt = Encoding.UTF8.GetBytes(Value);

             ms = new MemoryStream();

             cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

             cs.Write(byt, 0, byt.Length);

             cs.FlushFinalBlock();

             cs.Close();

             return Convert.ToBase64String(ms.ToArray());

          }

          #endregion

          #region public string DecryptString(string Value)

          /// <summary>

          /// 解密字符串

          /// </summary>

          /// <param name="Value">加过密的字符串</param>

          /// <returns>解密后的字符串</returns>

          public string DecryptString(string Value)

          {

             ICryptoTransform ct;

             MemoryStream ms;

             CryptoStream cs;

             byte[] byt;

             mCSP.Key = Convert.FromBase64String(sKey);

             mCSP.IV = Convert.FromBase64String(sIV);

             mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;

             mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

             ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);

             byt = Convert.FromBase64String(Value);

             ms = new MemoryStream();

             cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

             cs.Write(byt, 0, byt.Length);

             cs.FlushFinalBlock();

             cs.Close();

             return Encoding.UTF8.GetString(ms.ToArray());

          }

          #endregion

        }

    }

    三、总结

    做成类库对于密钥和矢量的保管比较方便,输入输出全部是string型变量,这样也比较方便,密钥的生成可以用mSCP. GenerateKey()来生成,矢量的生成也可以用mCSP.GenerateIV()来生成。大家也可以自己灵活的编写符合自己的3DES算法。

  • 相关阅读:
    MySQL binlog中 format_desc event格式解析
    位bit和字节Byte
    MySQL利用mysqlbinlog模拟增量恢复
    mysqldump参数 --master-data详解
    开启MySQL二进制日志
    设置花里胡哨的Xshell字体与背景颜色(超全)
    Python操作MySQL数据库
    给定一个由括号([{)]}其中之一或多个组成的字符串判断是否符合左右括号成对标准,不同括号可任意嵌套
    给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)
    不使用局部变量和for循环或其它循环打印出如m=19,n=2結果为2 4 8 16 16 8 4 2形式的串
  • 原文地址:https://www.cnblogs.com/ylqmf/p/2110596.html
Copyright © 2020-2023  润新知