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

  • 相关阅读:
    那是什么进程 —— svchost.exe是什么? 它为何运行?
    共享一下我的博客皮肤
    C#3.0亮点 —— 关键字var和匿名类型
    改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects)
    C#3.0亮点 —— 分部方法
    解决C#中一个"异步方法却同步执行"的问题
    改善代码设计 —— 简化函数调用(Making Method Calls Simpler)
    改善代码设计 —— 总结篇(Summary)
    理解A*寻路算法具体过程
    改善代码设计 —— 组织好你的数据(Composing Data)
  • 原文地址:https://www.cnblogs.com/wudingfeng/p/Encry.html
Copyright © 2011-2022 走看看