base64字符串结尾为什么有个空行符号 base64字符串有没有@字符

base64\u7f16\u7801\u4e3a\u4ec0\u4e48\u8981\u7528\u7b49\u53f7\u6765\u505a\u6700\u540e\u7a7a\u767d\u7684\u586b\u8865\u800c\u4e0d\u662f\u5176\u5b83\u7684\uff0c\u6bd4\u5982\u95ee\u53f7

\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

\u9996\u5148\uff0cBase64\u7b97\u4e0d\u4e0a\u662f\u4e00\u79cd\u52a0\u5bc6\u7b97\u6cd5\u3002
Base64\u662f\u7f51\u7edc\u4e0a\u6700\u5e38\u89c1\u7684\u7528\u4e8e\u4f20\u8f938Bit\u5b57\u8282\u4ee3\u7801\u7684\u7f16\u7801\u65b9\u5f0f\u4e4b\u4e00\uff0c\u5b83\u7684\u76ee\u7684\u662f\u7528ASCII\u4e2d\u5b9a\u4e49\u7684\u53ef\u89c1\u5b57\u7b26\u53bb\u8868\u793a\u4efb\u610f\u7684\u4e8c\u8fdb\u5236\u6570\u636e\u3002\u4e4b\u6240\u4ee5\u8981\u8fd9\u6837\u505a\uff0c\u662f\u56e0\u4e3a\u8ba1\u7b97\u673a\u4e2d\u5f88\u591a\u6570\u636e\u662f\u53ea\u80fd\u901a\u8fc7\u53ef\u89c1\u5b57\u7b26\u53bb\u4f20\u8f93\u7684\uff08\u6bd4\u5982\u6211\u4eec\u7684\u7f51\u7ad9\u7f51\u5740\uff0c\u6bd4\u5982\u4e00\u4e9b\u9762\u5411\u5b57\u7b26\u7684\u7f51\u7edc\u534f\u8bae\u5982SMTP\u7b49\uff09\uff0c\u4f46\u662f\u8fd9\u4e9b\u60c5\u666f\u6709\u65f6\u7531\u9700\u8981\u53bb\u4f20\u8f93\u4e8c\u8fdb\u5236\u6570\u636e\u3002\u57fa\u4e8e\u8fd9\u6837\u7684\u9700\u8981\uff0c\u8bde\u751f\u4e86Base64.
\u7b80\u5355\u6765\u8bb2\uff0cBase64\u5c31\u662f\u7528\u4e0b\u5217\u603b\u8ba164\u4e2a\u5b57\u7b26\uff1a
A-Z
a-z
0-9
+
/
\u53bb\u8868\u793a\u4e8c\u8fdb\u5236\u6570\u636e\u3002\u4e8c\u8fdb\u5236\u6570\u636e\u4ee5\u5b57\u8282\u4e3a\u7ec4\uff0c\u4e00\u4e2a\u5b57\u82828bit\u5b58\u5728256\u4e2a\u72b6\u6001\uff0c\u800c\u4e00\u4e2aBase64\u5b57\u7b26\u53ea\u670964\u4e2a\u72b6\u6001\u3002\u673a\u667a\u7684\u4eba\u4eec\u4e8e\u662f\u89c4\u5b9a\uff0c\u7528\u6bcf4\u4e2aBase64\u5b57\u7b26\u53bb\u8868\u793a3\u4e2a\u4e8c\u8fdb\u5236\u5b57\u8282\uff0c\u56e0\u4e3a\uff1a
64 * 64 * 64 * 64 = 256 * 256 * 256
\u56e0\u6b64\uff0cBase64\u5b57\u7b26\u4e32\u7684\u957f\u5ea6\u5fc5\u7136\u662f4\u7684\u6574\u6570\u500d\u3002\u6b64\u5916\uff0c\u7531\u4e8e\u4e8c\u8fdb\u5236\u7684\u5b57\u8282\u6570\u4e0d\u4e00\u5b9a\u662f3\u7684\u6574\u6570\u500d\uff0c\u6240\u4ee5Base64\u5b57\u7b26\u4e32\u5728\u7ed3\u5c3e\u662f\u53ef\u80fd\u6709\u7a7a\u7684\u3002\u8fd9\u4e9b\u7a7a\u7684\u72b6\u6001\uff0cBase64\u5f15\u5165\u7b2c65\u4e2a\u5b57\u7b26\u53bb\u8868\u793a\uff1a
=
\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48Base64\u5f88\u591a\u90fd\u662f\u4ee5=\u6216==\u7ed3\u5c3e\u7684\u3002\u4f46\u662f\u6ce8\u610f\uff0c\u4e5f\u5b58\u5728\u4e0d\u4ee5=\u6216==\u7ed3\u5c3e\u7684Base64\uff0c\u53ea\u8981\u7f16\u7801\u7684\u4e8c\u8fdb\u5236\u5b57\u8282\u6570\u6070\u597d\u88ab3\u7ed9\u6574\u9664\u3002

\u603b\u7ed3

\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u4e00\u4e2a\u5408\u6cd5\u7684Base64\uff0c\u6709\u7740\u4ee5\u4e0b\u7279\u5f81\uff1a
\u5b57\u7b26\u4e32\u7684\u957f\u5ea6\u4e3a4\u7684\u6574\u6570\u500d\u3002
\u5b57\u7b26\u4e32\u7684\u7b26\u53f7\u53d6\u503c\u53ea\u80fd\u5728A-Z, a-z, 0-9, +, /, =\u5171\u8ba165\u4e2a\u5b57\u7b26\u4e2d\uff0c\u4e14=\u5982\u679c\u51fa\u73b0\u5c31\u5fc5\u987b\u5728\u7ed3\u5c3e\u51fa\u73b0\u3002

按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)

为什么要使用Base64?

在设计这个编码的时候,我想设计人员最主要考虑了3个问题:
1.是否加密?
2.加密算法复杂程度和效率
3.如何处理传输?

加密是肯定的,但是加密的目的不是让用户发送非常安全的Email。这种加密方式主要就是“防君子不防小人”。即达到一眼望去完全看不出内容即可。
基于这个目的加密算法的复杂程度和效率也就不能太大和太低。和上一个理由类似,MIME协议等用于发送Email的协议解决的是如何收发Email,而并不是如何安全的收发Email。因此算法的复杂程度要小,效率要高,否则因为发送Email而大量占用资源,路就有点走歪了。

但是,如果是基于以上两点,那么我们使用最简单的恺撒法即可,为什么Base64看起来要比恺撒法复杂呢?这是因为在Email的传送过程中,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位。因此,如果您发送了一封带有非ASCII字符(即字节的最高位是1)的Email通过有“历史问题”的网关时就可能会出现问题。网关可能会把最高位置为0!很明显,问题就这样产生了!因此,为了能够正常的传送Email,这个问题就必须考虑!所以,单单靠改变字母的位置的恺撒之类的方案也就不行了。关于这一点可以参考RFC2046。
基于以上的一些主要原因产生了Base64编码。

算法详解

Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。
具体转化形式间下图:
字符串“张3”
11010101 11000101 00110011

00110101 00011100 00010100 00110011
表1

可以这么考虑:把8位的字节连成一串110101011100010100110011
然后每次顺序选6个出来之后再把这6二进制数前面再添加两个0,就成了一个新的字节。之后再选出6个来,再添加0,依此类推,直到24个二进制数全部被选完。
让我们来看看实际结果:

字符串“张3”
11010101 HEX:D5 11000101 HEX:C5 00110011 HEX:33

00110101 00011100 00010100 00110011
字符’5’ 字符’^\’ 字符’^T’ 字符’3’
十进制53 十进制34 十进制20 十进制51
表2

这样“张3 ”这个字符串就被Base64表示为”5^\^T3”了么?。错!
Base64编码方式并不是单纯利用转化完的内容进行编码。像’^\’字符是控制字符,并不能通过计算机显示出来,在某些场合就不能使用了。Base64有其自身的编码表:

Table 1: The Base64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
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 (pad) =
14 O 31 f 48 w
15 P 32 g 49 x
16 Q 33 h 50 y
表3

这也是Base64名称的由来,而Base64编码的结果不是根据算法把编码变为高两位是0而低6为代表数据,而是变为了上表的形式,如”A”就有7位,而”a”就只有6位。表中,编码的编号对应的是得出的新字节的十进制值。因此,从表2可以得到对应的Base64编码:

字符串“张3”
11010101 HEX:D5 11000101 HEX:C5 00110011 HEX:33

00110101 00011100 00010100 00110011
字符’5’ 字符’^\’ 字符’^T’ 字符’3’
十进制53 十进制34 十进制20 十进制51
字符’1’ 字符’i’ 字符’U’ 字符’z’
表4

这样,字符串“张3”经过编码后就成了字符串“1iUz”了。
Base64将3个字节转变为4个字节,因此,编码后的代码量(以字节为单位,下同)约比编码前的代码量多了1/3。之所以说是“约”,是因为如果代码量正好是3的整数倍,那么自然是多了1/3。但如果不是呢?
细心的人可能已经注意到了,在The Base64 Alphabet中的最后一个有一个(pad) =字符。这个字符的目的就是用来处理这个问题的。
当代码量不是3的整数倍时,代码量/3的余数自然就是2或者1。转换的时候,结果不够6位的用0来补上相应的位置,之后再在6位的前面补两个0。转换完空出的结果就用就用“=”来补位。譬如结果若最后余下的为2个字节的“张”:

字符串“张”
11010101 HEX:D5 11000101 HEX:C5

00110101 00011100 00010100
十进制53 十进制34 十进制20 pad
字符’1’ 字符’i’ 字符’U’ 字符’=’
表6

这样,最后的2个字节被整理成了“1iU=”。
同理,若原代码只剩下一个字节,那么将会添加两个“=”。只有这两种情况,所以,Base64的编码最多会在编码结尾有两个“=”
至于将Base64的解码,只是一个简单的编码的逆过程。

  • base64瀛楃涓茬粨灏句负浠涔堟湁涓┖琛岀鍙
    绛旓細杩欐牱锛瀛楃涓鈥滃紶3鈥濈粡杩囩紪鐮佸悗灏辨垚浜嗗瓧绗︿覆鈥1iUz鈥濅簡銆Base64灏3涓瓧鑺傝浆鍙樹负4涓瓧鑺傦紝鍥犳锛岀紪鐮佸悗鐨勪唬鐮侀噺锛堜互瀛楄妭涓哄崟浣嶏紝涓嬪悓锛夌害姣旂紪鐮佸墠鐨勪唬鐮侀噺澶氫簡1/3銆備箣鎵浠ヨ鏄滅害鈥濓紝鏄洜涓哄鏋滀唬鐮侀噺姝eソ鏄3鐨勬暣鏁板嶏紝閭d箞鑷劧鏄浜1/3銆備絾濡傛灉涓嶆槸鍛紵缁嗗績鐨勪汉鍙兘宸茬粡娉ㄦ剰鍒颁簡锛屽湪The Base...
  • 鍔犲瘑鍚庣殑瀛楃涓叉渶鍚庢湁涓や釜鈥==鈥濇槸浠涔鍔犲瘑绠楁硶?
    绛旓細3锛孊ase64鍊间负0灏辨槸A锛屼负27鐨勫氨鏄痓銆傝繖鏍凤紝姣3涓瓧绗︿骇鐢4浣嶇殑Base64瀛楃銆傚鏋滆鍔犲瘑鐨瀛楃涓姣3涓竴缁勶紝杩樺墿1鎴2涓瓧绗︼紝浣跨敤鐗规畩瀛楃"="琛ラ綈Base64鐨4瀛椼
  • base64鍔犲瘑瑙e瘑鍚,灏鹃儴鎬绘槸澶氬嚭浜嗗嚑涓棤鏁瀛楃,璇峰ぇ渚犲府蹇,涓嶈儨鎰熸縺...
    绛旓細浣犳煡鐪嬩笅 瀛楃涓叉湯灏捐繖浜涙槸鍚﹀張鐗规畩瀛楃 锛屾瘮濡 bom 鍥炶溅鎹㈣ 杩欑被鐨 涓滆タ 銆傛渶濂界殑 鏄姞瀵嗛挶鍏堟妸 杩欎簺鐗规畩瀛楃涓 鏇挎崲鎺
  • 涓枃url缂栫爜銆base64缂栫爜,PHP瑙g爜涓枃閮ㄥ垎涔辩爜
    绛旓細濡傛灉涓ょ鏈嶅姟鍣ㄩ〉闈娇鐢ㄧ殑缂栫爜涓嶄竴鑷达紝灏变細瀵艰嚧涔辩爜 濡備綘鎵璇达紝瀵规柟鏈嶅姟鍣ㄥ彂鏉ョ殑鏄疓BK缂栫爜鐨勫唴瀹癸紝濡傛灉浣犳湰鍦癙HP鐢ㄧ殑缂栫爜涓嶆槸GBK灏变細鏄贡鐮 2绉嶈В鍐虫柟妗堬細灏嗛〉闈㈢紪鐮佹洿鏀逛负GBK(鍙互閫氳繃header('Content-Type:text/html charset=gbk');)灏咷BK缂栫爜杞负褰撴湡椤甸潰缂栫爜(鍋囪褰撳墠椤甸潰鏄痷tf-8)锛屽彲浠ヤ娇鐢╥conv(...
  • 涓轰粈涔圔ase64缂栫爜鏈夊洖杞︽崲琛岀?
    绛旓細Base64涓琛屼笉鑳借秴杩76瀛楃锛岃秴杩囧垯娣诲姞鍥炶溅鎹㈣绗︺傜粨鍚堝墠闈㈠崥瀹㈣鐨勨滄湁鍥炶溅绗︼紝瀵艰嚧JSON鏍煎紡涓嶇鍚堣姹傗濓紝閭e氨鏄庣櫧浜嗭紝瀵归檮浠惰繘琛孊ase64缂栫爜锛屽洜涓鸿秴杩76瀛楄妭锛屾墍浠ヨ娣诲姞鍥炶溅鎹㈣绗︼紝鍚庡彴瑙f瀽甯︽湁鍥炶溅鎹㈣绗︾殑JSON瀛楃涓灏卞嚭鐜扳 net.sf.json.JSONException : Unterminated string 鈥濄傞棶棰樻牴婧愬氨鏄洖杞...
  • base64缂栬В鐮佷笌hash鍔犲瘑
    绛旓細鍒╃敤base64鍙互灏嗕簩杩涘埗鏁版嵁缂栫爜涓64涓瓧绗︾粍鎴愮殑瀛楃涓诧紝64涓瓧绗︿负a-z锛孉-Z锛0-9锛+锛/銆俠ase64缂栫爜鏄皢涓変釜瀛楄妭鐨勪簩杩涘埗鏁版嵁缂栫爜涓哄洓涓瓧鑺傜殑瀛楃鏁版嵁锛屽鏋滃瓧鑺傛暟涓嶄负3鐨勫嶆暟base64浼氬皢 \x00 琛ュ湪鏈熬锛屾墍浠ヤ細甯稿湪base64瀛楃涓鐨勬湯灏捐鍒颁竴涓垨鑰呬袱涓殑 = 鍙枫俠ase64缂栫爜 base64瑙g爜 灏...
  • base64缂栫爜鏄浠涔鎰忔濆晩?
    绛旓細15 P 32 g 49 x 16 Q 33 h 50 y 鍘熸枃鐨勫瓧鑺鏈鍚涓嶅3涓殑鍦版柟鐢0鏉ヨˉ瓒筹紝杞崲鏃Base64缂栫爜鐢=鍙锋潵浠f浛銆傝繖灏辨槸涓轰粈涔堟湁浜汢ase64缂栫爜浼氫互涓涓垨涓や釜绛夊彿缁撴潫鐨勫師鍥狅紝浣嗙瓑鍙锋渶澶氬彧鏈変袱涓備妇涓涓緥瀛愶紝abc缁忚繃Base64缂栫爜浠ュ悗鐨勭粨鏋滄槸YWJj.鍙戦偖浠剁殑鏃跺欐墍鍐欑殑淇℃伅鑷姩鍦ㄥ悗鍙拌浆鎹㈢劧鍚庝紶杈...
  • base64鍔犲瘑鐨勭粨鏋滆繕鏄瀛楃涓鍚
    绛旓細Base64瀛楃涓鐨勯暱搴﹀繀鐒舵槸4鐨勬暣鏁板嶃傛澶栵紝鐢变簬浜岃繘鍒剁殑瀛楄妭鏁颁笉涓瀹氭槸3鐨勬暣鏁板嶏紝鎵浠ase64瀛楃涓插湪缁撳熬鏄彲鑳芥湁绌虹殑銆傝繖浜涚┖鐨勭姸鎬侊紝Base64寮曞叆绗65涓瓧绗﹀幓琛ㄧず锛= 杩欎篃鏄涓轰粈涔Base64寰堝閮芥槸浠=鎴==缁撳熬鐨勩備絾鏄敞鎰忥紝涔熷瓨鍦ㄤ笉浠=鎴==缁撳熬鐨凚ase64锛屽彧瑕佺紪鐮佺殑浜岃繘鍒跺瓧鑺傛暟鎭板ソ琚3缁欐暣闄ゃ
  • Base64绠楁硶鍘熺悊鍙婂疄鐜
    绛旓細寰呯紪鐮佽浆鎹㈠畬鎴愪箣鍚庯紝鍦ㄧ粨鏋鏈熬琛ュ厖鐩稿悓涓暟鐨"="銆 渚嬪锛屽皢瀛楃涓"ABCD"杩涜Base64缂栫爜娴佺▼濡備笅銆傛墍浠ワ紝瀛楃涓"ABC"缁忚繃Base64缂栫爜鍚庣殑瀛楃涓叉槸"QUJDRA=="銆傚叾瀹炶繖閲屾湁涓寰嬶紝褰撳師鏂囩殑鏁版嵁闀垮害闄や互3浣欐暟涓0鏃讹紝缂栫爜涔嬪悗鍚庨潰娌℃湁"="锛涘綋浣欐暟涓1鏃讹紝鍚庨潰鏈変袱涓"="锛屽綋浣欐暟鏄2鏃讹紝鍚庨潰鏈変竴...
  • base64鎺堟潈鐮佺綉缁滃畨鍏ㄦ槸浠涔
    绛旓細Base64缂栫爜鍚庣殑瀛楃涓涓彲鑳藉寘鍚"+/="涔嬬被鐨勫瓧绗︼紝鑰"/"锛"="绛夋槸URL鐨勪繚鐣欏瓧绗︽垨涓嶅畨鍏ㄥ瓧绗︼紝鍥犳濡傛灉鐩存帴鍦║RL涓紶杈揃ase64缂栫爜锛屼繚鐣欏瓧绗﹀拰涓嶅畨鍏ㄥ瓧绗︿細琚浛鎹负%XX鐨勫舰寮忥紝瀵瑰悗绔潵璇磋В鐮佷笉鏂逛究銆傚鏋滀笉鏇挎崲锛屽氨浼氶犳垚URL娉ㄥ叆婕忔礊銆傚洜姝わ紝鏈変竴绉峌RL瀹夊叏鐨凚ase64缂栫爜锛屽彲浠ヨВ鍐宠繖涓棶棰樸 URL瀹夊叏...
  • 扩展阅读:base64怎样转成图片 ... java文件转base64 ... base64在线编码解码 ... base64编码在线转换 ... base64在线转换器 ... java base64加密 ... js 字符串转base64 ... 将字符串转为base64 ... java base64字符串解码 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网