zoukankan      html  css  js  c++  java
  • base64 小测试:

    base64工作原理:
    Base64是MIME邮件中常用的编码方式之一。它的主要思想是将输入的字符串或数据编码成只含有{‘A‘-‘Z‘, ‘a‘-‘z‘,
    ‘0‘-‘9‘, ‘+‘, ‘/‘}这64个可打印字符的串,故称为“Base64”。
    Base64编码的方法是,将输入数据流每次取6 bit,用此6 bit的值(0-63)作为索引去查表,输出相应字符。这样,每3个字节将
    编码为4个字符(3×8 → 4×6);不满4个字符的以‘=‘填充。

    c#把字符串转换成64位方法

    先转换 2进制流:

    可以根据系统自带的方法:

     string name = "abcdefg";
                byte[] bytes=Encoding.Default.GetBytes(name);//获取字节流
                StringBuilder ll = new StringBuilder();//可变字符串
                for (int i = 0; i < name.Length; i++)//循环转换2进制流
                {
                    string data1 = Convert.ToString(bytes[i],2) .PadLeft(8, '0');
                    ll.Append(data1);
                }
                string result = ll.ToString();

     结果:01100001011000100110001101100100011001010110011001100111

    也可以自己写:

    下面这个没有做循环所以只能先把字符串转出ascii然后输入;

     public static string to2(int value)
            {
                //先取得2进制位
                int yushu;//所得余数
                StringBuilder s = new StringBuilder("");
                while (true)
                {
                    if (value <= 1)
                    {
                        s.Append(value);
                        break;
                    }
                    yushu = value % 2;
                    s.Append(yushu);
                    value = (int)(value / 2);//把商赋值给value
                }
                //排序
                int changdu = s.Length;
                string result = "";
                int eightchang = (changdu + 3) / 4;
                for (int i = changdu; i > 0; i--)
                {
                    result += s[i - 1];
                }
                return result.PadLeft(eightchang * 4, '0');//不足当前长度左边用0补齐
            }

    运行结果: to('a')=01100001

    得到2进制流然后进行base64转换:

    方法有点冗余.懂方法就行了;

     public static string to64(string value)
            {
                int buqi = (value.Length + 5) / 6;//判断长度并对字符串进行6位补齐 要为6的倍数
                value = value.PadRight(6 * buqi, '0');
                StringBuilder s64 = new StringBuilder("");
                while (true)
                {
                    if (value.Length == 0)
                    {
                        break;
                    }
                    string jiequ = value.Substring(0, 6);
                    char zhengshu =base64(Convert.ToInt32(jiequ, 2));//装换成10进制并求值
                    if (zhengshu == '!')
                    {
                        Console.WriteLine("异常二进制串"+jiequ);
                    }
                    s64.Append(zhengshu);
                    value = value.Substring(6);
                }
                if (buqi <= 4)
                {
                    return s64.ToString().PadRight(4, '=');//用=号在右边补齐
                }
                else
                {
                    buqi = (int)(buqi + 5) / 6;//base64位的都是4的倍数.所以要适当位数=补齐操作;
                    return s64.ToString().PadRight(buqi * 6, '=');
                }
            }
            //对64进行相应解码:下面是对照ascii码解码的,也可以全部写出了解码;
            public static char base64(int value)
            {
                if (value <= 25)
                {
                    return (Char)(value + 65);
                }
    
                else if (25 < value && value <= 51)
                {
                    return (Char)(value + 71);
                }
                else if (51 < value && value < 61)
                {
                    return (char)(value - 3);
                }
                else if (value == 62)
                {
                    return '+';
                }
                else if (value == 63)
                {
                    return '/';
                }
                else
                {
                    return '!';
                }
            }

     

    base64位的字符对照表:

  • 相关阅读:
    How to change hostname on SLE
    How to install starDIct on suse OS?
    python logging usage
    How to reset password for unknow root
    How to use wget ?
    How to only capute sub-matched character by grep
    How to inspect who is caller of func and who is the class of instance
    How to use groovy script on jenkins
    Vim ide for shell development
    linux高性能服务器编程 (二) --IP协议详解
  • 原文地址:https://www.cnblogs.com/niubi007/p/6226388.html
Copyright © 2011-2022 走看看