zoukankan      html  css  js  c++  java
  • C# 加密可逆

    现在一直在做一个小软件,公司的通讯录系统,也没什么功能增删改查,这算是我来这个公司实习的第一件事吧。

    在修改个人信息的时候一直对于密码显示这个存在矛盾,不知道应该是要哪种形式去做,后来自己就先用md5加密的那种,做好了之后感觉不是很好,就是在去数据库密码的时候取不了,感觉特烦,后来在网上找了个可逆的加密,感觉好挺好用的。 先分享分享。

    建一个类Encrypt保存加密解密的那些步骤。

     1     private SymmetricAlgorithm mobjCryptoService;
     2     private string Key;
     3 
     4     public Encrypt()
     5     {
     6         //
     7         //TODO: 在此处添加构造函数逻辑
     8         //
     9         mobjCryptoService = new RijndaelManaged();
    10         Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
    11     }
    12     /// <summary>
    13     /// 获得密钥
    14     /// </summary>
    15     /// <returns>密钥</returns>
    16     private byte[] GetLegalKey()
    17     {
    18         string sTemp = Key;
    19         mobjCryptoService.GenerateKey();
    20         byte[] bytTemp = mobjCryptoService.Key;
    21         int KeyLength = bytTemp.Length;
    22 
    23         if (sTemp.Length > KeyLength)
    24             sTemp = sTemp.Substring(0, KeyLength);
    25         else if (sTemp.Length < KeyLength)
    26             sTemp = sTemp.PadRight(KeyLength, ' ');
    27         return ASCIIEncoding.ASCII.GetBytes(sTemp);   
    28     }
    29     /// <summary>
    30     /// 获得初始向量 IV
    31     /// </summary>
    32     /// <returns>初试向量IV</returns>
    33     private byte[] GetLegalIV()
    34     {
    35         string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
    36         mobjCryptoService.GenerateIV();
    37         byte[] bytTemp = mobjCryptoService.IV;
    38         int IVLength = bytTemp.Length;
    39         if (sTemp.Length > IVLength)
    40             sTemp = sTemp.Substring(0, IVLength);
    41         else if (sTemp.Length < IVLength)
    42             sTemp = sTemp.PadRight(IVLength, ' ');
    43         return ASCIIEncoding.ASCII.GetBytes(sTemp);
    44     }
    45     /// <summary>
    46     /// 加密方法
    47     /// </summary>
    48     /// <param name="Source">待加密的串</param>
    49     /// <returns>经过加密的串</returns>
    50     public string Encrypto(string Source)
    51     {
    52         byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
    53         MemoryStream ms = new MemoryStream();
    54         mobjCryptoService.Key = GetLegalKey();
    55         mobjCryptoService.IV = GetLegalIV();
    56         ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
    57         CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
    58         cs.Write(bytIn, 0, bytIn.Length);
    59         cs.FlushFinalBlock();
    60         ms.Close();
    61         byte[] bytOut = ms.ToArray();
    62         return Convert.ToBase64String(bytOut);
    63     }
    64     /// <summary>
    65     /// 解密方法
    66     /// </summary>
    67     /// <param name="Source">待解密的串</param>
    68     /// <returns>经过解密的串</returns>
    69     public string Decrypto(string Source)
    70     {
    71         byte[] bytIn = Convert.FromBase64String(Source);
    72         MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
    73         mobjCryptoService.Key = GetLegalKey();
    74         mobjCryptoService.IV = GetLegalIV();
    75         ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
    76         CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
    77         StreamReader sr = new StreamReader(cs);
    78         return sr.ReadToEnd();
    79     }   

    转自:http://www.knowsky.com/442584.html

    最后那个修改密码的,我就问主管应该怎么去显示,然后竟然得到的答案就是 ”为什么要去显示呢?“,好吧我承认我还小,最后我还是改回来了md5加密的。

  • 相关阅读:
    find
    fdisk
    falcon-eye
    ethtools
    e2fsck
    dpkg
    declare
    df
    debconf-utils
    区块链从零开始做开发(0):hyperledger Fabric2.3安装
  • 原文地址:https://www.cnblogs.com/chongde/p/3710807.html
Copyright © 2011-2022 走看看