base64的MIME base64编码为什么要用等号来做最后空白的填补而不是其它的...
base64\u503c\u662f\u4ec0\u4e48\u610f\u601dbase64\u662f\u4e00\u79cd\u7f16\u7801\u65b9\u5f0f\uff0c\u5c063\u5b57\u8282\uff083*8=24\u6bd4\u7279\uff09\u7684\u6570\u636e\u63096\u6bd4\u7279\u91cd\u65b0\u5206\u7ec4\uff0c\u5206\u62104\u7ec4\uff0c\u53d8\u62104\u5b57\u8282\u7684\u6570\u636e\uff08\u5b57\u8282\u7684\u9ad8\u4f4d\u75280\u586b\u5145\uff09\u3002\u4e00\u822c\u7528\u4e8e\u7535\u5b50\u90ae\u4ef6\u7684\u7f16\u7801\u4e2d\u3002
\u5176\u5b9e\u7528\u5176\u4ed6\u7684\u7b26\u53f7\u4e5f\u662f\u53ef\u4ee5\u7684\uff0c\u53ea\u662fRFC\u4e0a\u89c4\u5b9a\u7528=\u6765\u586b\u5145\u3002\u8fd9\u662f\u4eba\u4e3a\u89c4\u5b9a\u7684\uff0c\u4e3a\u7684\u662f\u5f62\u6210\u7edf\u4e00\u6807\u51c6\uff0c\u5728\u7f51\u7edc\u4f20\u8f93\u4e0a\u4e0d\u4f1a\u51fa\u73b0\u9519\u8bef\u3002\u6bd4\u5982\u8bf4\uff0c\u5982\u679cA\u7528\u4e86\uff1f\u586b\u5145\u5c06char\u8f6c\u53d8\u4e3abase64\uff0c\u800cB\u5728\u8f6c\u6362\u56de\u6765\u65f6\u7528\u7684\u662f=\u5c06base64\u8f6c\u56dechar\uff0c\u8fd9\u6837\u5b50\u56e0\u4e3a\u6807\u51c6\u4e0d\u7edf\u4e00\u5c31\u4f1a\u51fa\u73b0\u9519\u8bef\u3002\u5c31\u597d\u6bd4\u7528\u8bfa\u57fa\u4e9a\u7684\u5706\u5b54\u5145\u7535\u5668\u4e0d\u80fd\u7ed9\u82f9\u679c\u624b\u673a\u5145\u7535\u4e00\u6837\u3002\u3002
在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=
绛旓細Base64缂栫爜鏄竴绉嶁滈槻鍚涘瓙涓嶉槻灏忎汉鈥濈殑缂栫爜鏂瑰紡銆傚箍娉涘簲鐢ㄤ簬MIME鍗忚锛屼綔涓虹數瀛愰偖浠剁殑浼犺緭缂栫爜锛岀敓鎴愮殑缂栫爜鍙嗭紝鍚庝竴涓や綅鍙兘鏈夆=鈥濓紝鐢熸垚鐨勭紪鐮侀兘鏄痑scii瀛楃銆備紭鐐癸細閫熷害蹇紝ascii瀛楃锛岃倝鐪间笉鍙悊瑙 缂虹偣锛氱紪鐮佹瘮杈冮暱锛岄潪甯稿鏄撹鐮磋В锛屼粎閫傜敤浜庡姞瀵嗛潪鍏抽敭淇℃伅鐨勫満鍚 Python Base64缂栫爜鍜岃В鐮佺ず渚嬶細>>...
绛旓細Content-Transfer-Encoding:杩欐槸鎵鏈夊ご涓渶閲嶈鐨勪竴涓紝鍥犱负瀹冭鏄庝簡瀵规暟鎹墍鎵ц鐨勭紪鐮佹柟寮忥紝瀹 鎴/MUA 灏嗙敤瀹冨闄勪欢杩涜瑙g爜銆傚浜庢瘡涓檮浠讹紝鍙互浣跨敤7bit锛8bit锛宐inary 锛宷uoted-printable锛base64鍜宑ustom涓殑涓绉嶇紪鐮佹柟寮忋7bit缂栫爜鏄敤鍦║S ASCII瀛楃闆嗕笂鐨勫父鐢ㄧ殑涓绉嶇紪鐮佹柟寮忥紝涔熷氨鏄紝淇濇寔瀹冪殑...
绛旓細>>>瑙e喅Base64 encode鈥滀贡鐮佲濈殑鍔炴硶:鏂圭嵈ase64 encode鈥滀贡鐮佲濋偖浠跺瓨鎴愪竴涓枃鏈枃浠,鏀规枃浠跺悕鍚庣紑涓.UUE,鐒跺悗浣跨敤 Winzip 瑙g爜銆傛柟鐛碼se64 encode鈥滀贡鐮佲濋偖浠跺瓨鎴愪竴涓枃浠,灏嗘枃浠跺悗缂鏀逛负.EML,鐢監utLook Express 鎵撳紑,灏卞彲浠ヨ嚜鍔ㄨВ鐮併3.QP-encode鈥滀贡鐮佲>>>QP-encode鏄MIME鏍囧噯缂栫爜涔嬩竴銆俀P-encode缂栫爜鍏ㄥ悕...
绛旓細鍩烘湰涓婃槸Base64浣嗕篃鍏佽鐢ㄥ埆鐨勭紪鐮侊紝濡傦細form-url-encoding锛屽氨鏄%FF閭g銆 鍙﹀锛岄偖浠堕氬父鏄甫闄勪欢鐨勶紝閭d箞闇瑕佸鐞嗛檮浠剁殑鍐呭锛屾墍璋鐨凪IME鏍煎紡銆傚彟澶栵紝闄勪欢鏄彲浠ュ帇缂╃殑銆傘備絾閫氬父寰堝皯鐢ㄧ殑銆 瀵逛簬涓浗浜烘潵璁诧紝闄勪欢鍚嶇О涓鏋滄湁涓枃
绛旓細Base64鏄綉缁滀笂鏈甯歌鐨勭敤浜庝紶杈8Bit瀛楄妭浠g爜鐨勭紪鐮佹柟寮忎箣涓锛屽ぇ瀹跺彲浠ユ煡鐪婻FC2045锝濺FC2049锛屼笂闈㈡湁MIME鐨勮缁嗚鑼冦侭ase64缂栫爜鍙敤浜庡湪HTTP鐜涓嬩紶閫掕緝闀跨殑鏍囪瘑淇℃伅銆備緥濡傦紝鍦↗ava Persistence绯荤粺Hibernate涓紝灏遍噰鐢ㄤ簡Base64鏉ュ皢涓涓緝闀跨殑鍞竴鏍囪瘑绗︼紙涓鑸负128-bit鐨刄UID锛夌紪鐮佷负涓涓瓧绗︿覆锛岀敤浣淗TTP...
绛旓細Base64鏄MIME鏍囧噯缂栫爜涔嬩竴銆侭ase64 encode缂栫爜鏂瑰紡鏄皢3涓瓧鑺傦紙8浣嶏級鐢4涓瓧鑺傦紙6浣嶏級琛ㄧず锛岀敱浜庣紪鐮佸悗鐨勫唴瀹规槸6浣嶇殑锛屽洜姝ゅ彲浠ラ伩鍏嶇8浣嶈鎴帀銆侭ase64 encode鈥滀贡鐮佲濆ぇ浣撴牸寮忎负锛歁IME-Version:1.0 Content-Type:text/plain; charset="us-ascii鈥 Content-Transfer-Encoding:base64 Status:R yrE...
绛旓細鍗佽繘鍒34 鍗佽繘鍒20 pad 瀛楃鈥1鈥 瀛楃鈥檌鈥 瀛楃鈥橴鈥 瀛楃鈥=鈥欒〃6 杩欐牱锛屾渶鍚庣殑2涓瓧鑺傝鏁寸悊鎴愪簡鈥1iU=鈥濄傚悓鐞嗭紝鑻ュ師浠g爜鍙墿涓嬩竴涓瓧鑺傦紝閭d箞灏嗕細娣诲姞涓や釜鈥=鈥濄傚彧鏈夎繖涓ょ鎯呭喌锛屾墍浠ワ紝Base64鐨缂栫爜鏈澶氫細鍦ㄧ紪鐮佺粨灏炬湁涓や釜鈥=鈥濊嚦浜庡皢Base64鐨勮В鐮侊紝鍙槸涓涓畝鍗曠殑缂栫爜鐨勯嗚繃绋嬨
绛旓細姣斿璇翠腑鏂囧彲浠ョ敤utf-8缂栫爜锛屼絾鏄笉鑳界敤iso88591杩欑缂栫爜锛屽洜涓篿so88591璁捐鐨勬椂鍊欏氨娌℃湁鑰冭檻杩囦腑鏂囨眽瀛楅偅涔堝锛屽洜姝ゅ彧鑳芥樉绀哄瓧姣嶆暟瀛楀拰涓浜涚鍙凤紝鑰寀tf8杩欑鍙橀暱缂栫爜鍙互瀹圭撼闈炲父澶氱殑瀛楃锛屽彲浠ョ敤鏉ヨ〃绀鸿冻澶熷鐨勬眽瀛椼傛墍浠ヤ竴涓猽tf8缂栫爜鐨勬枃鏈敤鍙敮鎸乮so88591鐨勭紪杈戝櫒鎵撳紑灏变細涔辩爜銆傝寀rl缂栫爜鍜base64缂栫爜...
绛旓細1銆base64_decode() 鍑芥暟鍦≒HP涓槸瑙g爜鐨勬剰鎬濄佸浣跨敤 MIME base64 缂栫爜鐨勬暟鎹繘琛岃В鐮併備娇鐢╞ase64_decode()鍑芥暟瀵圭畝鍗曞瓧绗︿覆杩涜瑙g爜銆<?php$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';echo base64_decode($str);?>姝ょず渚嬪皢鏄剧ず锛歍his is an encoded string 2銆佷笌涔嬬浉鍙嶏紝base64_...
绛旓細涓嶈兘锛岃浆鎴恓pg鏍煎紡鍙兘鍦ㄧ數鑴戞垨鑰呭钩鏉夸笂杩涜锛base64 Base64鏄綉缁滀笂鏈甯歌鐨勭敤浜庝紶杈8Bit瀛楄妭浠g爜鐨勭紪鐮佹柟寮忎箣涓锛屽ぇ瀹跺彲浠ユ煡鐪婻FC2045~RFC2049锛屼笂闈㈡湁MIME鐨勮缁嗚鑼冦侭ase64缂栫爜鍙敤浜庡湪HTTP鐜涓嬩紶閫掕緝闀跨殑鏍囪瘑淇℃伅銆