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位的字符对照表:

base64 小测试:的更多相关文章

  1. Cad 二次开发关于SelectCrossingPolygon和SelectFence返回结果Status为error的小测试

    CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果, ...

  2. python 程序小测试

    python 程序小测试 对之前写的程序做简单的小测试 ... # -*- encoding:utf-8 -*- ''' 对所写程序做简单的测试 @author: bpf ''' def GameOv ...

  3. PHP中使用PDO操作事务的一些小测试

    关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...

  4. HTTP性能小测试

    一直说node.js如何如何好,就来测试一下吧~~ 首先接受一个小工具 Apache Bench简称ab 可以用来测试http性能 利用Apache Bench测试Web引擎性能关于此工具的详细介绍参 ...

  5. mysql注入小测试

    转自:http://www.jb51.net/article/46163.htm 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏 ...

  6. 将图片转成base64 小工具

    工作需要使用,所以就做了一个小工具,方便使用 推荐使用 chrome,ff . 毕竟是个小工具方便自己使用而已,所以没有做浏览器兼容测试了! 代码如下,直接保存为 .html 打开即可 <!DO ...

  7. SpringMvc拦截器小测试

    前言 俗话说做项目是让人成长最快的方案,最近小编写项目的时候遇到了一个小问题.小编在项目中所负责的后台系统,但是后台系统是通过系统的页面是通过ifame联动的,那么这时候问题就来了,后台所做的所有操作 ...

  8. 曲演杂坛--Update的小测试

    今天偶然想起一个UPDATE相关的小问题,正常情况下,如果我们将UPDATE改写成与之对应的SELECT语句,其SELECT查询结果应与UPDATE的目标表存在一对一的关系,例如: 对于UPDATE语 ...

  9. Base64实现测试,不要太相信apache-common的性能

    针对三种Base64实现: * 自已实现的 * JDK8的java.util.Base64 * apache-common的org.apache.commons.codec.binary.Base64 ...

随机推荐

  1. SGU 124.Broken line

    时间限制:0.25s 空间限制:4M 题意: 给出n条线段和一个点,保证所有线段平行X轴或Y,并且闭合成一个多边形.判断这个点的位置是在多边形上,还是多边形内,还是多边形外. solution: 由于 ...

  2. 读书笔记之 - javascript 设计模式 - 组合模式

    组合模式是一种专为创建Web上的动态用户界面而量身定制的模式,使用这种模式,可以用一条命令在对各对象上激发复杂的或递归的行为. 在组合对象的层次体系中有俩种类型对象:叶对象和组合对象.这是一个递归定义 ...

  3. 『重构--改善既有代码的设计』读书笔记----Replace Data Value with Object

    当你在一个类中使用字段的时候,发现这个字段必须要和其他数据或者行为一起使用才有意义.你就应该考虑把这个数据项改成对象.在开发初期,我们对于新类中的字段往往会采取简单的基本类型形式来保存,但随着我们开发 ...

  4. 《bunzip2命令》-linux命令五分钟系列之八

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...

  5. <input>标签

    一. 上传图片: type="file":上传文件​ accept:选择上传的种类,图片或者是视频(/png只能上传png格式的图片) ​multiple="multip ...

  6. JDK与Tomcat的联系

    如果服务器没有安装JDK或没有配置JDK环境变量,则Tomcat启动出错 报错:需要JAVA_HOME 或JRE_HOME环境变量 所以必须首先安装JDK 配置环境变量 web服务器Tomcat才能运 ...

  7. Sequoyah 本机开发Native Development: Invalid path for NDK(路径无效) 解决方案

    打开window菜单下的preference选项.选择Android,Native Development(本地开发) 选择你的NDK安装目录. 但是,这个插件目前仅支持ndk的r4和r5版本,更高版 ...

  8. beego路由实现原理

    树形结构+递归算法实现路由的注册与匹配: 1 数据结构: // 树节点结构type Tree struct { //search fix route first fixrouters map[stri ...

  9. Web NFC API

    W3C Editor's Draft 29 December 2014 This version: http://www.w3.org/2012/nfc/web-api/ Latest publish ...

  10. codeforces C. Mashmokh and Numbers

    题意:给你n和k,然后让你找出n个数使得gcd(a1,a2)+gcd(a3,a4)+......的和等于k: 思路:如果n为奇数,让前n-3个数的相邻两个数都为1,n-2和n-1两个数gcd为k-an ...