zoukankan      html  css  js  c++  java
  • 共享一个 可逆加解密函数

    今天,PM 问我可逆函数,当时还真蒙了一会,高中的数学忘的也真可以了。后来详谈后,才反应过来。

    在大学的实验室做课题的时候,指导老师也是我院长,曾提供可逆加密解密的函数,起作用不用细说了。

    这会整理出来,供大家参考。

    我将这两个函数(加密函数 和 解密函数至于一个静态类中):

    注意:这里,还是用的种子辅助加解密,以免大家都用的话,岂不是透明了,也就失去其加密的效果了。

        public static class Util
        {
            
    public static string m_strKey = "Microsoft";   // 加密解密种子,这个很重要哦

            
    public static string Encode(string strKey, string strSource)
            {
                
    int iKeyLen = 0, iKeyPos = 0, iOffset = 0, iSrcPos = 0, iSrcAsc = 0, iRange = 0;
                
    string strDest = "";    //加密后的字符串
                char cTmp;

                iKeyLen 
    = strKey.Trim().Length;

                
    if (iKeyLen == 0)
                    strKey 
    = m_strKey;    //如果参数为空值把key设置成Infoshare,即默认的种子

                iKeyPos 
    = 0;
                iRange 
    = 255;

                Random rdObj 
    = new Random();

                iOffset 
    = rdObj.Next(0, iRange);    //将0-256范围内取随机数

                strDest 
    = iOffset.ToString("X2");   //将随机数转换成16进制数

                
    for (iSrcPos = 0; iSrcPos < strSource.Trim().Length; iSrcPos++)
                {

                    cTmp 
    = strSource[iSrcPos];
                    iSrcAsc 
    = ((short)cTmp + iOffset) % 255;

                    
    if (iKeyPos < iKeyLen)
                        iKeyPos 
    = iKeyPos + 1;
                    
    else
                        iKeyPos 
    = 1;

                    cTmp 
    = strKey[iSrcPos];
                    iSrcAsc 
    = iSrcAsc ^ (short)cTmp;

                    strDest 
    = strDest + iSrcAsc.ToString("X2");

                    iOffset 
    = iSrcAsc;
                }
                
    return strDest;
            }

            
    public static string Decode(string strKey, string strSource)
            {
                
    int iKeyLen, iKeyPos, iOffset, iSrcPos, iSrcAsc, iTmpSrcAsc;
                
    string strDest = "";

                iKeyLen 
    = strKey.Trim().Length;

                
    if (iKeyLen == 0)
                {
                    strKey 
    = m_strKey;
                    iKeyLen 
    = strKey.Length;
                }

                iKeyPos 
    = 0;

                iOffset 
    = Int32.Parse(strSource.Trim().Substring(02), System.Globalization.NumberStyles.HexNumber);

                iSrcPos 
    = 2;

                
    do
                {
                    iSrcAsc 
    = Int32.Parse(strSource.Trim().Substring(iSrcPos, 2), System.Globalization.NumberStyles.HexNumber);

                    
    if (iKeyPos < iKeyLen)
                        iKeyPos 
    = iKeyPos + 1;
                    
    else
                        iKeyPos 
    = 1;

                    iTmpSrcAsc 
    = iSrcAsc ^ (short)strKey[iKeyPos - 1];

                    
    if (iTmpSrcAsc <= iOffset)
                        iTmpSrcAsc 
    = 255 + iTmpSrcAsc - iOffset;
                    
    else
                        iTmpSrcAsc 
    = iTmpSrcAsc - iOffset;

                    strDest 
    = strDest + (char)iTmpSrcAsc;

                    iOffset 
    = iSrcAsc;
                    iSrcPos 
    = iSrcPos + 2;
                }
                
    while (iSrcPos < strSource.Length);

                
    return strDest;
            }
        }

    简单使用一下:

    ASPX:

    <div>
            
    <asp:TextBox ID="txtNumber1" runat="server" /> 
            
    <br />
            
    <br />
            
    <asp:Button ID="btnEncode" Text="Encode" runat="server" 
                onclick
    ="btnEncode_Click" /><asp:Label ID="lblEnCode" runat="server" />
            
    <br />
            
    <br />
            
    <asp:TextBox ID="txtNumber2" runat="server" />
            
    <br />
            
    <br />
            
    <asp:Button ID="btnDecode" Text="Decode" runat="server" 
                onclick
    ="btnDecode_Click" /><asp:Label ID="lblDecode" runat="server" />
        
    </div>

    C#:

    string m_Num;
    string m_Source;

    protected void Page_Load(object sender, EventArgs e)
    {
        
    }

    protected void btnEncode_Click(object sender, EventArgs e)
    {
        m_Num 
    = this.txtNumber1.Text.Trim();
        Session[
    "Source"= m_Source= Util.Encode("", m_Num);
        lblEnCode.Text 
    = m_Source;
    }

    protected void btnDecode_Click(object sender, EventArgs e)
    {
        m_Source 
    = Session["Source"].ToString();

        
    if (this.txtNumber2.Text.Trim() != "")
        {
            m_Source 
    = this.txtNumber2.Text.Trim();

            lblDecode.Text 
    = Util.Decode("", m_Source);
        }
        
    else
        {
            lblDecode.Text 
    = Util.Decode("", m_Source);
        }
    }

    效果:

     

    希望对大家有用。

  • 相关阅读:
    实验三
    第六七章读后感
    0415评论
    0414-复利计算
    实验8 201306114104彭得源
    实验7 201306114104彭得源
    实验6 201306114104彭得源
    android实验五201306114104彭得源
    android实验四201306114104彭得源
    实验五 04彭得源
  • 原文地址:https://www.cnblogs.com/Dlonghow/p/1374108.html
Copyright © 2011-2022 走看看