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();
      }
     }
    }

  • 相关阅读:
    Writing Layout Tests for DumpRenderTree – WebKit
    阻碍Web开放的不是WebKit,而是Web开发者的短视
    Running Selenium 'headless' with Chrome Driver in Python YouTube
    百度开发者大会:愿与开发者合作共赢
    Nginx进行流量copy到测试环境
    Minimize to tray 1.3.2.61
    Smart Caching for Web Browsers
    Objective of the Guidelines
    美丽说胡嵩:APP只做一件事 价值定位要清晰 | 马可咪
    Writing Layout Tests for DumpRenderTree – WebKit
  • 原文地址:https://www.cnblogs.com/azhai/p/311120.html
Copyright © 2011-2022 走看看