zoukankan      html  css  js  c++  java
  • pb加密转换成C#

    本来想把PB 的函数封装成COM组件调用,结果怎么都搞不定,只能讲代码搞出来换种语言实现了.

    string s_ret
    integer i_first,i_second,i_third,i_fourth
    integer by4,i,reallen
    long i_total
    string is_key
    string is_base64
    string EncMap[0 to 63]
    int DecMap[0 to 127]
    integer by3
    long i_len
    
    is_base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    is_base64 = is_base64 + "abcdefghijklmnopqrstuvwxyz"
    is_base64 = is_base64 + "0123456789"
    is_base64 = is_base64 + "+/"
    for i = 1 to 63
        EncMap[i]=mid(is_base64,i+1,1)
    next
    for i = 1 to 63
        DecMap[asc(EncMap[i])] = i
    next
    choose case a_type
        case 0//加密
            s_ret = ""
            if len(a_text)= 0 then 
                return s_ret
            end if
            by3=len(a_text) - mod(len(a_text),3)
            i=1
            do while i<= by3
                i_first = asc(mid(a_text,i + 0,1))
                i_second = asc(mid(a_text, i + 1,1))
                i_third = asc(mid(a_text,i + 2,1))
                s_ret = s_ret + encmap[i_first / 4]
                s_ret = s_ret + encmap[mod(i_first , 4) * 16 + i_second / 16 ]
                s_ret = s_ret + encmap[mod(i_second , 16) * 4 + i_third / 64 ]
                s_ret = s_ret + encmap[mod(i_third , 64)] 
                i = i + 3
            loop
            if i <= len(a_text) then
                i_first = asc(mid(a_text, i + 0, 1))
                if mod(len(a_text), 3)=2 then
                    i_second =asc(mid(a_text,i+1,1))
                    s_ret = s_ret + encmap[i_first / 4]
                    s_ret = s_ret + encmap[mod(i_first , 4) * 16 + i_second / 16 ]
                    s_ret = s_ret + encmap[mod(i_second , 16) * 4 ]
                    s_ret = s_ret + "="        
                else
                    s_ret = s_ret + encmap[i_first / 4]
                    s_ret = s_ret + encmap[mod(i_first,4) * 16]
                    s_ret = s_ret + "=="
                end if
            end if
            i_len = len(s_ret)
            s_ret = left(string(i_len+10),2) + s_ret
            
        case 1//解密
            if len(a_text)= 0 then 
                s_ret = ""
                return s_ret
            end if
            a_text=right(a_text,len(a_text)-2)
            reallen = len(a_text)
            do while mid(a_text,reallen,1) = "=" 
                reallen = reallen - 1
            loop
            by4=reallen - mod(reallen,4)
            i=1
            do while i<= by4
                i_first = decmap[asc(mid(a_text,i + 0,1))]
                i_second = decmap[asc(mid(a_text, i + 1,1))]
                i_third = decmap[asc(mid(a_text,i + 2,1))]
                i_fourth = decmap[asc(mid(a_text,i + 3,1))]
                s_ret = s_ret + char(i_first * 4 + i_second / 16)
                s_ret = s_ret + char(mod(i_second,16) * 16 + i_third / 4 )
                if mod(i_third,4) * 64 + i_fourth <> 0 then
                    s_ret = s_ret + char(mod(i_third,4) * 64 + i_fourth)
                end if
                i = i + 4
            loop
            if i<= reallen then     //只可能是xx==或xxx=两种形式有效
                if mod(reallen,4) = 2 then    //xx==形式
                    i_first = decmap[asc(mid(a_text,i + 0,1))]
                    i_second = decmap[asc(mid(a_text, i + 1,1))]
                    s_ret = s_ret + char(i_first * 4 + i_second / 16)
                    s_ret = s_ret + char(mod(i_second,16) * 16)
                else
                    i_first = decmap[asc(mid(a_text,i + 0,1))]
                    i_second = decmap[asc(mid(a_text, i + 1,1))]
                    i_third = decmap[asc(mid(a_text,i + 2,1))]
                    s_ret = s_ret + char(i_first * 4 + i_second / 16)
                    s_ret = s_ret + char(mod(i_second,16) * 16 + i_third / 4 )
                end if
            end if
    
    end choose
    return s_ret 
            public static string right(string s1, int str)
            {
                return s1.Substring(s1.Trim().Length - str, str);
            }
    
            public static string left(string s1, int str)
            {
                return s1.Substring( 0, str);
            }
    
            public static char mid(string s1, int str, int len)
            {
                return s1.Substring(str, len).ToArray()[0];
            }
    
            public static int asc(char c1)
             {
                 return(int)c1;
             }
    
            public static int mod(int x,int y)
            {
                return x % y;
            }
    
            public static int len(string s1)
            {
                return s1.Length;
            }
    
            public static string encrypt(string a_text, string type = "1")
            {
                string s_ret;
                int i_first, i_second, i_third, i_fourth;
                int by4, i, reallen;
                long i_total;
                string is_key;
                string is_base64;
                char[] encmap = new char[64];
                int[] decmap = new int[128];
                int by3 = 0;
                long i_len;
    
                is_base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                is_base64 = is_base64 + "abcdefghijklmnopqrstuvwxyz";
                is_base64 = is_base64 + "0123456789";
                is_base64 = is_base64 + "+/";
    
                char[] tk = is_base64.ToCharArray();
    
                for (i = 1; i <= 63; i++)
                {
                    encmap[i] = tk[i];
                }
    
                for (i = 1; i <= 63; i++)
                {
                    int tp = (int)asc(encmap[i]);
                    decmap[tp] = i;
                }
    
    
                s_ret = "";
                if (a_text.Trim() == "")
                {
                    return s_ret;
                }
    
                if (type == "1")
                {
                    by3 = a_text.Length - (a_text.Length % 3);
    
                    i = 0;
                    while (i < by3)
                    {
                        i_first = asc(mid(a_text, i + 0, 1));
    
                        i_second = asc(mid(a_text, i + 1, 1));
                        i_third = asc(mid(a_text, i + 2, 1));
                        s_ret = s_ret + encmap[i_first / 4];
                        s_ret = s_ret + encmap[mod(i_first, 4) * 16 + i_second / 16];
                        s_ret = s_ret + encmap[mod(i_second, 16) * 4 + i_third / 64];
                        s_ret = s_ret + encmap[mod(i_third, 64)];
                        i = i + 3;
                    }
                    if (i < len(a_text))
                    {
                        i_first = asc(mid(a_text, i + 0, 1));
                        if ((a_text.Length % 3) == 2)
                        {
                            i_second = asc(mid(a_text, i + 1, 1));
                            s_ret = s_ret + encmap[i_first / 4];
                            s_ret = s_ret + encmap[mod(i_first, 4) * 16 + i_second / 16];
                            s_ret = s_ret + encmap[mod(i_second, 16) * 4];
                            s_ret = s_ret + "=";
                        }
                        else
                        {
                            s_ret = s_ret + encmap[i_first / 4];
                            s_ret = s_ret + encmap[mod(i_first, 4) * 16];
                            s_ret = s_ret + "==";
                        }
                    }
                    i_len = len(s_ret);
                    s_ret = left((i_len + 10).ToString(), 2) + s_ret;
                }
                else
                {
    
                    a_text = right(a_text, len(a_text) - 2);
                    reallen = len(a_text);
                    while (mid(a_text, reallen - 1, 1) == '=')
                    {
                        reallen = reallen - 1;
                    }
    
                    by4 = reallen - mod(reallen, 4);
    
                    i = 0;
    
    
                    while (i < by4)
                    {
                        i_first = decmap[asc(mid(a_text, i + 0, 1))];
                        i_second = decmap[asc(mid(a_text, i + 1, 1))];
                        i_third = decmap[asc(mid(a_text, i + 2, 1))];
                        i_fourth = decmap[asc(mid(a_text, i + 3, 1))];
                        s_ret = s_ret + (char)(i_first * 4 + i_second / 16);
                        s_ret = s_ret + (char)(mod(i_second, 16) * 16 + i_third / 4);
                        if (mod(i_third, 4) * 64 + i_fourth != 0)
                        {
                            s_ret = s_ret + (char)(mod(i_third, 4) * 64 + i_fourth);
                        }
                        i = i + 4;
                    }
                    if (i < reallen)
                    {
                        //只可能是xx==或xxx=两种形式有效
                        if (mod(reallen, 4) == 2)    //xx==形式
                        {
                            i_first = decmap[asc(mid(a_text, i + 0, 1))];
                            i_second = decmap[asc(mid(a_text, i + 1, 1))];
                            s_ret = s_ret + (char)(i_first * 4 + i_second / 16);
                            s_ret = s_ret + (char)(mod(i_second, 16) * 16);
                        }
                        else
                        {
                            i_first = decmap[asc(mid(a_text, i + 0, 1))];
                            i_second = decmap[asc(mid(a_text, i + 1, 1))];
                            i_third = decmap[asc(mid(a_text, i + 2, 1))];
                            s_ret = s_ret + (char)(i_first * 4 + i_second / 16);
                            s_ret = s_ret + (char)(mod(i_second, 16) * 16 + i_third / 4);
                        }
                    }
                }
                return s_ret;
            }
  • 相关阅读:
    POJ 3259 Wormholes【BellmanFord】
    POJ 2960 SNim【SG函数的应用】
    ZOJ 3578 Matrixdp水题
    HDU 2897 邂逅明下【bash博弈】
    BellmanFord 算法及其优化【转】
    【转】几个Java的网络爬虫
    thinkphp 反字符 去标签 自动加点 去换行 截取字符串 冰糖
    php 二维数组转 json文本 (jquery datagrid 数据格式) 冰糖
    PHP 汉字转拼音(首拼音,所有拼音) 冰糖
    设为首页与加入收藏 兼容firefox 冰糖
  • 原文地址:https://www.cnblogs.com/CoreXin/p/8143223.html
Copyright © 2011-2022 走看看