• 加密解密


    开发中需要一个加密解密的双向过程
    MD5等Hash类型的单向加密不能符合使用的要求
    所以自己写了一个类,当然还是调用 System.Security.Cryptography的方法
    DESCryptoServiceProvider

    加密过程
    通过GetKey()、GetIV()方法产生和密钥key、随机变量IV

    解密过程
    用key、IV作为参数 通过SetKey()、SetIV()给Sercurity类的Key和IV负值

    key、IV都是byte[]
    遇到的问题:string-〉byte[]的转化
    解决: Convert.FromBase64String(string s) 返回byte[]



      1using System;
      2using System.IO;
      3using System.Text;
      4using System.Security.Cryptography;
      5
      6namespace mySecurity
      7{
      8    /// <summary>
      9    /// MySecurity 的摘要说明。
     10    /// </summary>

     11    public class Security
     12    {
     13        private  SymmetricAlgorithm mCSP = new DESCryptoServiceProvider();
     14    
     15        //private  SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
     16        
     17        /// <summary>
     18        /// 加密
     19        /// </summary>
     20        /// <param name="Value"></param>
     21        /// <returns></returns>

     22        public string EncryptString(string Value)
     23        {
     24            ICryptoTransform ct;
     25            MemoryStream ms;
     26            CryptoStream cs;
     27            byte[] byt;
     28
     29            ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
     30
     31            byt = Encoding.UTF8.GetBytes(Value);
     32
     33            ms = new MemoryStream();
     34            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
     35            cs.Write(byt, 0, byt.Length);
     36            cs.FlushFinalBlock();
     37    
     38            cs.Close();
     39
     40            return Convert.ToBase64String(ms.ToArray());
     41        }

     42
     43        /// <summary>
     44        /// 解密
     45        /// </summary>
     46        /// <param name="Value"></param>
     47        /// <returns></returns>

     48        public string DecryptString(string Value)
     49        {
     50            ICryptoTransform ct;
     51            MemoryStream ms;
     52            CryptoStream cs;
     53            byte[] byt;
     54
     55            ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
     56
     57            byt = Convert.FromBase64String(Value);
     58
     59            ms = new MemoryStream();
     60            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
     61            cs.Write(byt, 0, byt.Length);
     62            cs.FlushFinalBlock();
     63
     64            cs.Close();
     65
     66            return Encoding.UTF8.GetString(ms.ToArray());
     67        }

     68        
     69        
     70        public Security(){}
     71
     72        #region 设置、获取Key、IV
     73        /// <summary>
     74        /// 获取产生的Key值,加密过程之前需调用该方法
     75        /// </summary>
     76        /// <returns></returns>

     77        public string GetKey()
     78        {
     79            mCSP.GenerateKey();
     80            return Convert.ToBase64String(mCSP.Key);
     81        }

     82
     83        /// <summary>
     84        /// 获取产生的随机变量值,加密过程之前需调用该方法
     85        /// </summary>
     86        /// <returns></returns>

     87        public string GetIV()
     88        {
     89            mCSP.GenerateIV();
     90            return    Convert.ToBase64String(mCSP.IV);
     91        }

     92
     93        /// <summary>
     94        /// 设置Key的值,解密过程之前需要调用
     95        /// </summary>
     96        /// <param name="key"></param>
     97        /// <returns></returns>

     98        public string SetKey(string key)
     99        {
    100            mCSP.Key    =    Convert.FromBase64String(key);
    101            return Convert.ToBase64String(mCSP.Key);
    102        }

    103        /// <summary>
    104        /// 设置随机变量IV的值,解密过程之前需要调用
    105        /// </summary>
    106        /// <param name="IV"></param>
    107        /// <returns></returns>

    108        public string SetIV(string IV)
    109        {
    110            mCSP.IV = Convert.FromBase64String(IV);
    111            return    Convert.ToBase64String(mCSP.IV);
    112        }

    113        #endregion

    114
    115
    116    }

    117}

    118

    最后编译成dll,方便重用
  • 相关阅读:
    ubuntu14.04安装chromium以及flash插件
    linux fuser的使用
    对max_allowed_packet这个参数的误解
    Linux hostname主机名配置文件与文件 /etc/hosts解析(copy来的,原作者看到了别打我)
    三个参数,对mysql存储限制的影响
    唉,没来这里好久了,也意味着我这一年多来没干什么正事儿,是回归的时候了!(简单谈谈爬虫的解析器)
    STM32 宏定义翻转端口
    ascii码表
    平均值算法
    stm8 16M晶振下精确软件延时
  • 原文地址:https://www.cnblogs.com/scgw/p/1454911.html
Copyright © 2020-2023  润新知