php64转码,Base64的编码转换方式
下面,详细介绍Base64的编码转换方式。
所谓Base64,就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)----作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。
具体来说,转换方式可以分为四步。
第一步,将每三个字节作为一组,一共是24个二进制位。
第二步,将这24个二进制位分为四组,每个组有6个二进制位。
第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。
第四步,根据下表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w
15 P 32 g 49 x
16 Q 33 h 50 y
因为,Base64将三个字节转化成四个字节,因此Base64编码后的文本,会比原文本大出三分之一左右。
1.
举一个具体的实例,演示英语单词Man如何转成Base64编码。
Text content
M
a
n
ASCII
77
97
110
Bit pattern
0
1
0
0
1
1
0
1
0
1
1
0
0
0
0
1
0
1
1
0
1
1
1
0
Index
19
22
5
46
Base64-Encoded
T
W
F
u
第一步,"M"、"a"、"n"的ASCII值分别是77、97、110,对应的二进制值是01001101、01100001、01101110,将它们连成一个24位的二进制字符串010011010110000101101110。
第二步,将这个24位的二进制字符串分成4组,每组6个二进制位:010011、010110、000101、101110。
第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节:00010011、00010110、00000101、00101110。它们的十进制值分别是19、22、5、46。
第四步,根据上表,得到每个值对应Base64编码,即T、W、F、u。
因此,Man的Base64编码就是TWFu。
2.
如果字节数不足三,则这样处理:
a)二个字节的情况:将这二个字节的一共16个二进制位,按照上面的规则,转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码,再在末尾补上一个"="号。
比如,"Ma"这个字符串是两个字节,可以转化成三组00010011、00010110、00010000以后,对应Base64值分别为T、W、E,再补上一个"="号,因此"Ma"的Base64编码就是TWE=。
b)一个字节的情况:将这一个字节的8个二进制位,按照上面的规则转成二组,最后一组除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码,再在末尾补上两个"="号。
比如,"M"这个字母是一个字节,可以转化为二组00010011、00010000,对应的Base64值分别为T、Q,再补上二个"="号,因此"M"的Base64编码就是TQ==。
3.
再举一个中文的例子,汉字"严"如何转化成Base64编码?
这里需要注意,汉字本身可以有多种编码,比如gb2312、utf-8、gbk等等,每一种编码的Base64对应值都不一样。下面的例子以utf-8为例。
首先,"严"的utf-8编码为E4B8A5,写成二进制就是三字节的"11100100 10111000 10100101"。将这个24位的二进制字符串,按照第3节中的规则,转换成四组一共32位的二进制值"00111001 00001011 00100010 00100101",相应的十进制数为57、11、34、37,它们对应的Base64值就为5、L、i、l。
所以,汉字"严"(utf-8编码)的Base64值就是5Lil。
4.
在PHP语言中,有一对专门的函数用于Base64转换:base64_encode()用于编码、base64_decode()用于解码。
这对函数的特点是,它们不管输入文本的编码是什么,都会按照规则进行Base64编码。因此,如果你想得到utf-8编码下的Base64对应值,你就必须自己保证,输入的文本是utf-8编码的。
详细介绍Base64的编码转换方式
下面,详细介绍Base64的编码转换方式. 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9.符号"+"."/"(再加上 ...
Java base64 图片编码转换
package com.test; import org.junit.Test; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encode ...
中文字符串的编码转换(c实现)
中文字符串在c/c++中表示为字节序列,在分词的时候需要根据不同的编码方式进行分词,一般分词器需要转换成统一的编码方式再进行转换,有些分词器如ICTCLAS在分词的时候可以不显示定义编码方式,可以检测 ...
完整的java字符串编码转换代码
package book.String; import java.io.UnsupportedEncodingException; /** *//** * 转换字符串的编码 * @author joe ...
JAVA字符串编码转换常用类
无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312.一.关键技术点: ...
Base64图片编码原理,base64图片工具介绍,图片在线转换Base64
Base64图片编码原理,base64图片工具介绍,图片在线转换Base64 DataURI 允许在HTML文档中嵌入小文件,可以使用 img 标签或 CSS 嵌入转换后的 Base64 编码,减少 ...
java 自定义实现base64编码转换
1.base64编码转换 所谓base64编码,即按照规则把字符转化为"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456 ...
为什么有的代码要用 base64 进行编码
一.1.传输信道只支持ASCII字符,不方便传输二进制流的场合. 2.含有非ASCII字符,容易出现编码问题的场合. 3.简易的掩人耳目.至少非开发人一眼看不出来是啥. 二.Base64主要用于将不可 ...
我的Java开发学习之旅------&;gt;Base64的编码思想以及Java实现
Base64是一种用64个字符来表示随意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,由于二进制文件包括非常多无法显示和打印的字符.所以,假设要让记事本这种 ...
随机推荐
CSS3 笔记一(Rounded Corners/Border Images/Backgrounds)
CSS3 Rounded Corners The border-radius property is a shorthand property for setting the four border- ...
SVG 是什么?
SVG 意为可缩放矢量图形(Scalable Vectors Graphics). SVG 图形在放大或者改变尺寸的情况下,其图形的质量不会有所损失. SVG 使用 XML 格式定义图形. ...
JAVA 创建类,使用类
一.创建类: Test.java //定义类 public class Test{ //属性 String name; String gender; int age; //方法,无参无返回 publi ...
win下Maven安装和基本设置
注:本文介绍 Windows 平台上 Maven 的安装.Maven 3 需要运行在 JDK1.4 以上的版本上. 非原创:原创地址 http://www.ibm.com/developerworks ...
Install PhoneGap
To Install, ensure that you have NodeJS installed, then open your commandline and run the following: ...
FreeMarker-Built-ins for numbers
http://freemarker.org/docs/ref_builtins_number.html#topic.extendedJavaDecimalFormat Page Contents ab ...
js格式化时间为JSON格式 ajax提交 后台处理
var effectRow = new Object();if ($('#grd_infos').datagrid('getChanges').length) { var update = $( ...
8位基本定时器(TIM4)
简介:该定时器由一个带可编程预分频器的8位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能. 主要功能: (1)8位向上计数的自动重载计数器: (2)3位可编程的预分配器(可在运 ...
Linux学习(十三)du、df、fdisk磁盘分区
一.du du命令是查看文件或者目录大小的命令. 一般使用du -sh 查看,不用-sh参数意义也不大,应为不用这个参数,它会把目录下的所有文件大小递归的显示出来,就像这样: 如果用-sh参数: [r ...
windows凭据管理
解决windows凭据无法保存的问题1: 运行-gpedit.msc(组策略)-计算机配置-管理模板-系统-凭据分配 双击右侧”允许分配保存的凭据用于仅NTLM服务器身份验证“ 在弹出的窗口中选中“已 ...
php64转码,Base64的编码转换方式相关推荐
- js符号转码_js 字符串编码转换函数
escape 方法 对 String 对象编码以便它们能在所有计算机上可读, escape(charString) 必选项 charstring 参数是要编码的任意 String 对象或文字. 说明 ...
- c语言iconv转码错误,iconv编码转换的问题
在网上有如下代码: /*代码转换:从一种编码转为另一种编码*/ int code_convert(const char *from_charset, const char *to_charset, c ...
- java 字符转化字符串_【转载】java字符串的各种编码转换
来自:http://www.blogjava.net/rabbit/archive/2008/03/27/189009.html import java.io.UnsupportedEncodingE ...
- java int转bitmap_Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码...
首先是网上大神给的类 package com.duanlian.daimengmusic.utils; public final class Base64Util { private static f ...
- 编码转换以及乱码恢复
ASCII编码 128个字符用7个位表示,计算机最小存储单位是byte,即8位.ASCII最高位是0,剩余7位表示字符.7位刚好表示0-127. 具体表示如下: Ascii 码对美国是够用了,但对别的 ...
- 现代密码学—密码学基本编码实践 16进制向base64编码转换 等长16进制字符串异或 找出密钥并破解密文 python
实验地点:E楼III区503 实验时间:11.17 一.实验室名称:攻防实验室 二.实验项目名称:密码学基本编码实践 三.实验学时:6学时 四.实验原理: Base64是网络上最常见的用于传输8Bit ...
- java unicode转ascii码_Java用native2ascii命令做unicode编码转换
背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...
- 手机号码转码_中文域名转码,中文域名PunyCode编码转换,中文域名在线转码工具,Punycode编码在线转换工具...
中文域名分为两类: 1.一类是域名后缀为英文字母的国际中文域名和别国中文域名,比如:中文.com,中文.net,中文.biz,中文.cc,中文.hk,中文.tm,中文.tv,中文.tw: 2.一类是域 ...
- 3位格雷码的顺序编码_一种优化格雷码编码方式实现跨时钟域的装置的制作方法...
本发明属于信号处理技术领域,尤其是涉及一种优化格雷码编码方式实现跨时钟域的装置. 背景技术: 随着时间的推移,集成电路行业发展至今,已有类似如intel这样先进的foundry,提出迈入10nm制程的 ...
- JAVA字码的转换_java字符编码转换研究(转)
1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...
最新文章
- 在SQL Server中保存和输出任意类型的文件
- oracle if=,oracle中if/else的三种实现方式详解
- 1.3:Render Pipeline and GPU Pipeline
- autosys file watcher 注意事项
- pat乙级相当于什么水平_雅思6.5是什么水平?相当于托福多少分?
- WPF Visibility的用法
- 技巧 | 如何批量地将整型变量转换为因子变量
- Java泛型程序设计
- Python中系统命令
- java构造器基本语法_Java语言中的定义变量、构造函数
- kali linux下sqlmap使用教程
- python for循环经典案例
- DB2完整的SQLCODE和SQLState错误信息
- Delphi语言基础
- Excel绘制斜线表头
- 3G模块拨号上网设置
- 商品详情页静态html,day08(商品详情页SKU联动+FreeMarker模版页面静态化)
- 2019年部分实习面经回顾
- 使用群晖作mineportalbox(1):合理且不折腾地使用群晖硬件和套件
- CALayer创建图层(转)
热门文章
- 百度搜索引擎优化入门篇——来自百度的一封信
- 腾讯笔试题——五笔编码
- chm文件导入java_java API的chm文件制作
- PostgreSQL下载、安装和配置使用
- Matlab编程实现图像放大
- 新版微信支持鸿蒙os,微信突然宣布!“新功能”全面爆发,鸿蒙OS措手不及
- linpack测试软件,服务器性能测试(linpack,stream,netperf,iometer)
- Vue移动端H5手势缩放滚动拖拽插件Easyscroller
- 利用计算机来对指纹,指纹识别系统(文献综述).doc
- 基本矩阵运算法则之笔记