zoukankan      html  css  js  c++  java
  • 用C#实现的对称加密算法

         以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例:using System;
    using System.IO;
    using System.Security.Cryptography;

    using System.Text;

    namespace DataCrypto
    {
     /// <summary>
     /// 对称加密算法类
     /// </summary>
     public class SymmetricMethod
     {
      
      private SymmetricAlgorithm mobjCryptoService;
      private string Key;
      /// <summary>
      /// 对称加密类的构造函数
      /// </summary>
      public SymmetricMethod()
      {
       mobjCryptoService = new RijndaelManaged();
       Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
      }
      /// <summary>
      /// 获得密钥
      /// </summary>
      /// <returns>密钥</returns>
      private byte[] GetLegalKey()
      {
       string sTemp = Key;
       mobjCryptoService.GenerateKey();
       byte[] bytTemp = mobjCryptoService.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 = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
       mobjCryptoService.GenerateIV();
       byte[] bytTemp = mobjCryptoService.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>
      /// 加密方法
      /// </summary>
      /// <param name="Source">待加密的串</param>
      /// <returns>经过加密的串</returns>
      public string Encrypto(string Source)
      {
       byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
       MemoryStream ms = new MemoryStream();
       mobjCryptoService.Key = GetLegalKey();
       mobjCryptoService.IV = GetLegalIV();
       ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
       CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
       cs.Write(bytIn, 0, bytIn.Length);
       cs.FlushFinalBlock();
       ms.Close();
       byte[] bytOut = ms.ToArray();
       return Convert.ToBase64String(bytOut);
      }
      /// <summary>
      /// 解密方法
      /// </summary>
      /// <param name="Source">待解密的串</param>
      /// <returns>经过解密的串</returns>
      public string Decrypto(string Source)
      {
       byte[] bytIn = Convert.FromBase64String(Source);
       MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
       mobjCryptoService.Key = GetLegalKey();
       mobjCryptoService.IV = GetLegalIV();
       ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
       CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
       StreamReader sr = new StreamReader(cs);
       return sr.ReadToEnd();
      }
     }
    }

  • 相关阅读:
    MyEclipe 配置 ivy 插件
    PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?
    Hadoop 中 Eclipse 的配置
    Hadoop 配置好hive,第一次在conf能进入,第二次就不行了,怎么办?
    7系列FPGA远程更新方案-QuickBoot(转)
    Serial interface (RS-232)
    Linux下安装微信(转)
    《图解HTTP》读书笔记(转)
    《图解TCP/IP》读书笔记(转)
    7 Serial Configuration 理解(三)
  • 原文地址:https://www.cnblogs.com/azhai/p/311120.html
Copyright © 2011-2022 走看看