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

  • 相关阅读:
    字典或者数组与JSON串之间的转换
    银联支付 支付代码
    iOS 一个新方法:- (void)makeObjectsPerformSelector:(SEL)aSelector;
    iOS 直接使用16进制颜色
    iOS 添加view的分类(更加方便的设置view的位置)
    iOS 中UITableView的深理解
    Swift 中调试状态下打印日志
    手把手教React Native实战开发视频教程【更新到40集啦。。。】
    React Native 开发
    React-Native学习指南
  • 原文地址:https://www.cnblogs.com/azhai/p/311120.html
Copyright © 2011-2022 走看看