url: http://zh.wikipedia.org/wiki/Base64
Base64是一種使用64基的位置計數法。它使用2的最大次方來代表僅可列印的ASCII 字元。這使它可用來作為電子郵件的傳輸編碼。在Base64中的變數使用字元A-Z、a-z和0-9 ,這樣共有62個字元,用來作為開始的64個數字,最後兩個用來作為數字的符號在不同的系統中而不同。一些如uuencode的其他編碼方法,和之後binhex的版本使用不同的64字符集來代表6個二進位數字,但是它們不叫Base64。
MIME
在MIME格式的電子郵件中,base64可以用來將binary的位元組序列數據編碼成ASCII字元序列構成的文本。使用時,在傳輸編碼方式中指定base64。使用的字元包括大小寫字母各26個,加上10個數字,和加號「+」,斜杠「/」,一共64個字元,等號「=」用來作為後綴用途。
完整的base64定義可見 RFC1421和 RFC2045。編碼後的數據比原始數據略長,為原來的4/3。在電子郵件中,根據RFC822規定,每76個字元,還需要加上一個回車換行。可以估算編碼後數據長度大約為原長的135.1%。
轉換的時候,將三個byte的數據,先後放入一個24bit的緩衝區中,先來的byte占高位。數據不足3byte的話,於緩衝區中剩下的Bit用0補足。然後,每次取出6個bit,按照其值選擇ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
中的字元作為編碼後的輸出。不斷進行,直到全部輸入數據轉換完成。
如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;如果最後剩下一個輸入數據,編碼結果後加2個「=」;如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。
舉例來說,一段引用自Thomas Hobbes's Leviathan的文句:
Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure. |
經過base64編碼之後變成:
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=
一個例子
「M」的ASCII碼 = 77 = 01001101
「a」的 = 97 = 01100001
「n」的 = 110 = 01101110
將這三個位元組拼合,得出一個24位的資料:
010011010110000101101110
現在六個一組的分開,這樣便得到六個數。將這些數轉為:
010011 = 19 = T (T是第19個英文字母)
010110 = 22 = W (W是第22個英文字母)
000101 = 5 = F
101110 = 46 = u (U是第20個英文字母)
base64編碼是:
00010011 00010110 00000101 00101110
即是每3個未編碼位元組,編碼後會得到4個位元組。
- 加密M:M=01001101,變成加密010011010000,六個一組分開是010011 010000,結果是TQ,然後在後面加兩個「=」,結果就是「TQ==」。
在URL中的應用
Base64編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進位數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
然而,標準的Base64並不適合直接放在URL里傳輸,因為URL編碼器會把標準Base64中的「/」和「+」字元變為形如「%XX」的形式,而這些「%」號在存入資料庫時還需要再進行轉換,因為ANSI SQL中已將「%」號用作通配符。
為解決此問題,可採用一種用於URL的改進Base64編碼,它不在末尾填充'='號,並將標準Base64中的「+」和「/」分別改成了「*」和「-」,這樣就免去了在URL編解碼和資料庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,並統一了資料庫、表單等處對象標識符的格式。
另有一種用於正則表達式的改進Base64變種,它將「+」和「/」改成了「!」和「-」,因為「+」,「*」以及前面在IRCu中用到的「[」和「]」在正則表達式中都可能具有特殊含義。
此外還有一些變種,它們將「+/」改為「_-」或「._」(用作程式語言中的標識符名稱)或「.-」(用於XML中的Nmtoken)甚至「_:」(用於XML中的Name)。
分享到:
相关推荐
任务 Base64解码 INTERNATIONAL MEDICAL SUMMIT FORUM 任务 Base64解码 任务背景 ...Base64:Python中提供了Base64编码和解码的基础模块。 编码方法:base64.b64encode(bytes),因base64编码时是对字节进行
nvo_base64在pb8中导出的文件,需要有项目将此文件导入。 函数为: public function string base64encode (blob blobbuf) public function blob base64decode (string strbuf, ref character lc_return[]) //2013.11...
在前人的基础上增加了json解析封装得到base64或反转成文件。包括案例,源代码。 调用简单,不错的学习案例。 std::unique_ptr*>p(new const char*(readfile64("{\"filename\":\"D:\\\\job\\\\greatwall\\\\test\\\\1...
使用 python 开发的一个将【批量将xlxs文件中的base64转成png图片】的工具,工具适合所有没有程序基础的人员,直接按照文档执行,就能完成转换!如果有特定的需求,请联系开发人员,对代码进行特定需求开发!
VC一些基础实例,多为网上整理,部分自己改写,均经过测试可用,包含3个小程序:屏幕截图 目录删除 base64算法
介绍一种base64-编码解码工具-python实现源码,方便用户在此基础上继续开发。
ubuntu-base是一个基础的Ubuntu系统,可以理解为最小的Ubuntu系统,Ubuntu(乌班图)是一个以桌面应用为主的Linux操作系统,属于Linux操作系统。 Ubuntu 是基于Debian GNU/Linux,支持x86、amd64(即x64)和ppc...
本源码从CSDN一位前辈的源码基础上做了更改,增加支持加密返回BASE64,更加完善。在此感谢原作者: http://download.csdn.net/download/qiaohaidong/9477264 需要注意的是仅在XE及以上版本支持Base64返回结果,...
本Demo提供三种方式来加密解密,都是用Qt本身提供的类,没用外接库。 本Demo是在5.9.6开发 作者博客链接地址:https://blog.csdn.net/u014597198。
基于Qt和C++实现的图片文字和base64编码互转界面操作+源码,适合期末大作业、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: * base64编码转换类 * 1. 图片转base64...
本篇《Base64系列第四篇 C/C++中使用Base64编码解码(从chromium库中抽取)》将从大名鼎鼎的chromium库抽取代码,保证健壮高效的完成Base64编码解码。
通过JavaScript的基础运算来实现字符的转换,通过特定字符转换成其他字符,实现字符加密解密的功能
Java基础加密组件--BASE64加密 使用方法: //加密 String a = EdptByBase64.encryptBASE64("/**/;pas58"); System.out.println(a); //还原 System.out.println(EdptByBase64.decryptBASE64(a)); 具体源码请参见: ...
基础知识是在 GO 中创建一个 REST 服务器,该服务器连接到 mongo 服务器以存储/检索 Base64 图像。 需要做什么: 创建休息服务器。 创建 Mongo 连接器。 Mongo 连接器现在需要测试。 在由 Darthlukan 提供的 ...
在前一个版本基础上做了效率优化,对于大文本和大文件效率提高N倍。 修正前一版本的一个错误: 在前一个版本中,发现一个错误,文件解密后最后一个字节始终为00,该错误现已修正。 <br>如发现错误,请给我...
swift-extras-base64 该软件包在Swift中提供了base64编码器和解码器,而无需使用Foundation。 该实现并且比Foundation base64实现要快。 为了获得性能,该实现使用,并大量使用了不安全的swift API。 当Swift对...
本文件在前人工作的基础上完成,对第三方生成的编码可以正常解码,已应用在项目中。2019.6.12修改了原代码运行溢出的bug ,并按照RFC822规定标准对回车换行符进行兼容处理,详见示例代码。
上次给大家分享了如何用js实现剪切板粘贴上传图片,今天跟大家分享下JS Base64编码解码。 1. 基础不牢,选型糟糕 糟糕的技术选型往往源自自身技术广度不足。就在数月前,一个前端HTML字符信息转Base64的需求,我是...
主要介绍了PHP安全的URL字符串base64编码和解码,在base64的基础上替换了不安全的一些字符,需要的朋友可以参考下
Amp-streaming-base64.zip,AMP流的实时Base64编码。,amp是php的一个非阻塞并发框架。它提供事件循环、承诺和流,作为异步编程的基础。