PHP源码阅读笔记三十八:base64_encode实现

【什么是base64编码】

Base64是一种使用64基的位置计数法。它使用2的最大次方来代表仅可打印的ASCII 字符。这使它可用来作为电子邮件的传输编码。在Base64中的变量使用字符A-Z、a-z和0-9 ,这样共有62个字符,用来作为开始的64个数字,最后两个用来作为数字的符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后binhex的版本使用不同的64字符集来代表6个二进制数字,但是它们不叫Base64。

【base64编码产生的历史原因】

在Email的传送过程中,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位。因此,如果您发送了一封带有非ASCII字符(即字节的最高位是1)的Email通过有”历史问题“的网关时就可能会出现问题。网关可能会把最高位置为0!由于以上原因,产生了Base64编码。

【base64_encode的PHP内部实现】

base64_encode是PHP的标准函数,它存在于标准扩展中,在ext/standard/base64.c 210行,以标准的PHP_FUNCTION(base64_encode)实现。如下所示代码:

/* {{{ proto string base64_encode(string str)

Encodes string using MIME base64 algorithm */

PHP_FUNCTION(base64_encode)

{

char *str;

unsigned char *result;

int str_len, ret_l

php base64encode 长度,base64_encode相关推荐

  1. 【web安全】——文件包含漏洞

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:一切为了她​​​​​​​ 座右铭:不要让时代的悲哀成为你的悲哀 专研方向:网络安全,数据结构 每日emo:可后来,除了梦以外的地方,我再 ...

  2. base64_encode() 和 base64_decode() 8bit图片通过网络传输

    一.为什么要使用base64编码? Base64是一种基于64个可打印字符来表示二进制数据的表示方法. 有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符 ...

  3. php 限定字符长度,php 字符串长度限制

    各位好,我的数据完整的存数据库中(10000字左右),用php 获取数据获取该字段内容时,为什么只能获取前部份内容,而获取的不是所有的内容 回复讨论(解决方案) 字段是什么类型的? 怎么会啊 你是不是 ...

  4. php 固定长度加密解密,如何加密/解密数据在PHP?

    前言 从您的表定义开始: - UserID - Fname - Lname - Email - Password - IV 这里是更改: >字段Fname,Lname和Email将使用由Open ...

  5. ---已搬运--:[0CTF 2016]piapiapia -----代码审计+字符串逃逸+数组绕过长度限制+以及一下小知识点 preg_match()用数组,而且注意if是正确判断,还是错误判断

    目录: 00000.知识点: 1.url传入数组绕过长度限制?? 2.数组的遍历 3.数组绕过正则 一.自己做: 二.学到的&&不足: 四.学习WP 1.学习一个大佬的思路: 2.学习 ...

  6. php md5 64,php加密函数md5,crypt,base64_encode的用法介绍

    介绍下php中自带的加密函数 1,不可逆的加密函数为:md5().crypt() md5() 用来计算 MD5 哈稀.语法为:string md5(string str); crypt() 将字符串用 ...

  7. 伍六七带你学算法 入门篇——最后一个单词的长度

    难度 简单 给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度.如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词. 如果不存在最后一个单词,请返回 0 . 说 ...

  8. 十进制转化为二进制java代码_【模板小程序】任意长度十进制数转化为二进制(java实现)...

    妈妈再也不用担心十进制数过大了233 import com.google.common.base.Strings; import java.math.BigInteger; import java.u ...

  9. Go 知识点(15)— 切片长度和容量

    1. 切片声明时默认的长度和容量 1.1 切片声明时不指定容量 切片在使用 make 声明时,如果没有显式的说明切片的容量,那么默认容量和切片的长度保持一致. func main() {s1 := m ...

最新文章

  1. [转]WINDOWS服务器安全加固实战(WINDOWS SERVER 2008 R2和WINDOWS SERVER 2012)
  2. html5实现获取地理位置信息并定位
  3. Gitlab环境快速部署(RPM包方式安装)
  4. 揭穿骗子阴谋,学会保护自己
  5. java生成大素数_用BigInteger实现大素数生成算法
  6. 24. PE结构-PE详解之基址重定位详解
  7. php使用phantomjs
  8. 【数据泵】EXPDP导出表结构
  9. 字符串匹配---KMP
  10. Mac如何用Boot Camp安装Windows 11?告诉你如何安装 能不能安装!
  11. 计算机添加usb网络打印机,方便实用!教您如何简单地将USB打印机更改为无线打印机!...
  12. Eclipse菜单栏翻译
  13. ios系统获取udid
  14. Kent Beck 教你编程模式与代码重构
  15. 安卓手机能提取当前页面的链接吗_如何获取一个app内的网页地址?
  16. 转载:云计算必将极大影响未来--云泉
  17. 依靠大数据魔力 阿拉丁金服整合数据优势服务于实体经济
  18. excel打不开怎么办_第52期分享:Excel大佬有哪些骚操作呢?
  19. GScan:Linux Checklist自动化检测
  20. Features and Characteristics

热门文章

  1. mysql服务启动后停止解决办法
  2. 九九乘法表每天进步一点点的收获
  3. 电路方案分析(八)Type-C 端口短路保护参考设计
  4. 服务器里vm启动不了共享虚拟机,VMware Workstation Server共享服务不能启动
  5. 全开源/三网免挂码支付系统/支付宝免输入金额/支付宝H5微信QQ免签/二维码收款免签支付
  6. 达梦数据库02-DM8客户端安装与数据迁移
  7. Python基础-day02
  8. 龙族幻想微信一区哪个服务器人多,龙族幻想哪个区人最多_龙族幻想哪个区人多一点...
  9. 微信小程序——沉浸式导航栏实现
  10. GOF23种设计模式精解