zoukankan      html  css  js  c++  java
  • 加密与解密

    最近想要对连接字符串加密,就直接想到了加密字符串的方法,如下有示例一个:
    先定义一个key与iv
    private string key = "GroupPower";
    private string iv = "AFaneTi";
    再定义一个加密对象
    private RijndaelManaged mobjCryptoService = new RijndaelManaged();
    然后初始化Key与IV
    /// <summary>
            
    /// 初始化密钥
            
    /// </summary>
            
    /// <returns>密钥字节数组</returns>
            private byte[] GetLegalKey()
            {
                
    string result = "";
                mobjCryptoService.GenerateKey();
                
    byte[] buff = mobjCryptoService.Key;
                
    if (key.Length < buff.Length)
                {
                    result 
    = key.PadRight(buff.Length, ' ');
                }
                
    else if (key.Length > buff.Length)
                {
                    result 
    = key.Substring(0, buff.Length);
                }
                
    else
                {
                    result 
    = key;
                }
                
    return Encoding.ASCII.GetBytes(result);
            }  

            
    /// <summary>
            
    /// 初始化向量IV
            
    /// </summary>
            
    /// <returns>IV向量字节数组</returns>
            private byte[] GetLegalIV()
            {
                
    string result = "";
                mobjCryptoService.GenerateIV();
                
    byte[] buff = mobjCryptoService.IV;
                
    if (iv.Length < buff.Length)
                {
                    result 
    = iv.PadRight(buff.Length, ' ');
                }
                
    else if (iv.Length > buff.Length)
                {
                    result 
    = iv.Substring(0, buff.Length);
                }
                
    else
                {
                    result 
    = iv;
                }
                
    return Encoding.ASCII.GetBytes(result);
            }  
    下面是对称加密字符串
    /// <summary>
            
    /// 对称加密字符串
            
    /// </summary>
            
    /// <param name="sourceStr">待加密的字符串</param>
            
    /// <returns>加密后的字符串</returns>
            public string EncryStr(string sourceStr)
            {
                
    byte[] bytIn = UTF8Encoding.UTF8.GetBytes(sourceStr);
                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="sourceStr">密文</param>
            
    /// <returns>明文</returns>
            public string DecryStr(string sourceStr)
            {
                
    try
                {
                    
    byte[] bytIn = Convert.FromBase64String(sourceStr);
                    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();
                }
                
    catch
                {
                    
    throw new Exception("源字符串格式不正确");
                    
    return null;
                }
            }  

  • 相关阅读:
    设置DataGridView垂直滚动条
    在自定义MessageBox控件里添加键盘回车事件。
    通过访问注册表,表判断系统是否装excel
    让文本框里只能输入数字
    新晋菜鸟的错误
    jdbc连接数据库以及crud(简单易懂,本人亲测可用 有源代码和数据库)
    springboot 错误求解决
    maven 导包报错
    最短路径Dijkstra
    读写者问题
  • 原文地址:https://www.cnblogs.com/wudingfeng/p/Encry.html
Copyright © 2011-2022 走看看