{"id":1612,"date":"2014-11-20T13:58:25","date_gmt":"2014-11-20T13:58:25","guid":{"rendered":"http:\/\/ixyzero.com\/blog\/?p=1612"},"modified":"2018-06-03T08:50:17","modified_gmt":"2018-06-03T00:50:17","slug":"python%e7%9a%84base64%e6%a8%a1%e5%9d%97","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/1612.html","title":{"rendered":"Python\u7684base64\u6a21\u5757"},"content":{"rendered":"<p>Python\u7684base64\u6a21\u5757\u662f\u7528\u6765\u4f5cbase64\u7f16\u89e3\u7801\u7684\u3002\u8fd9\u79cd\u7f16\u7801\u65b9\u5f0f\u5728\u7535\u5b50\u90ae\u4ef6\u4e2d\u662f\u5f88\u5e38\u89c1\u7684\u3002<span style=\"color: #ff0000;\">\u5b83\u53ef\u4ee5\u628a\u4e0d\u80fd\u4f5c\u4e3a\u6587\u672c\u663e\u793a\u7684\u4e8c\u8fdb\u5236\u6570\u636e\u7f16\u7801\u4e3a\u53ef\u663e\u793a\u7684\u6587\u672c\u4fe1\u606f\u3002\u7f16\u7801\u540e\u7684\u6587\u672c\u5927\u5c0f\u4f1a\u589e\u59271\/3\u3002<\/span><\/p>\n<p>\u95f2\u8bdd\u4e0d\u591a\u8bf4\uff0cbase64\u6a21\u5757\u771f\u6b63\u7528\u7684\u4e0a\u7684\u65b9\u6cd5\u53ea\u67098\u4e2a\uff0c\u5206\u522b\u662fencode, decode, encodestring, decodestring, b64encode, b64decode, urlsafe_b64decode, urlsafe_b64encode\u3002\u4ed6\u4eec8\u4e2a\u53ef\u4ee5\u4e24\u4e24\u5206\u4e3a4\u7ec4\uff1a<\/p>\n<p style=\"padding-left: 30px;\">\u4e00\u3001encode\u548cdecode\u4e00\u7ec4\uff0c<span style=\"color: #ff0000;\"><strong>\u4e13\u95e8\u7528\u6765\u7f16\u7801\u548c\u89e3\u7801\u6587\u4ef6\u7684<\/strong><\/span>\uff0c\u4e5f\u53ef\u4ee5\u5bf9StringIO\u91cc\u7684\u6570\u636e\u505a\u7f16\u89e3\u7801\uff1b<\/p>\n<p style=\"padding-left: 30px;\">\u4e8c\u3001encodestring\u548cdecodestring\u4e00\u7ec4\uff0c<span style=\"color: #ff0000;\"><strong>\u4e13\u95e8\u7528\u6765\u7f16\u7801\u548c\u89e3\u7801\u5b57\u7b26\u4e32<\/strong><\/span>\uff1b<\/p>\n<p style=\"padding-left: 30px;\">\u4e09\u3001b64encode\u548cb64decode\u4e00\u7ec4\uff0c<strong>\u7528\u6765\u7f16\u7801\u548c\u89e3\u7801\u5b57\u7b26\u4e32\uff0c\u5e76\u4e14\u6709\u4e00\u4e2a\u66ff\u6362\u7b26\u53f7\u5b57\u7b26\u7684\u529f\u80fd<\/strong>\u3002\u8fd9\u4e2a\u529f\u80fd\u662f\u8fd9\u6837\u7684\uff1a\u56e0\u4e3abase64\u7f16\u7801\u540e\u7684\u5b57\u7b26\u9664\u4e86\u82f1\u6587\u5b57\u6bcd\u548c\u6570\u5b57\u5916\u8fd8\u6709\u4e09\u4e2a\u5b57\u7b26\u201c+ \/ =\u201d\uff0c\u5176\u4e2d=\u53ea\u662f\u4e3a\u4e86\u8865\u5168\u7f16\u7801\u540e\u7684\u5b57\u7b26\u6570\u4e3a4\u7684\u6574\u6570\uff0c\u800c+\u548c\/\u5728\u4e00\u4e9b\u60c5\u51b5\u4e0b\u9700\u8981\u88ab\u66ff\u6362\u6389\uff0cb64encode\u548cb64decode\u6b63\u662f\u63d0\u4f9b\u4e86\u8fd9\u6837\u7684\u529f\u80fd\u3002\u81f3\u4e8e\u4ec0\u4e48\u60c5\u51b5\u4e0b+\u548c\/\u9700\u8981\u88ab\u66ff\u6362\uff0c\u6700\u5e38\u89c1\u7684\u5c31\u662f\u5bf9url\u8fdb\u884cbase64\u7f16\u7801\u7684\u65f6\u5019\uff1b<\/p>\n<p style=\"padding-left: 30px;\">\u56db\u3001urlsafe_b64encode\u548curlsafe_b64decode\u4e00\u7ec4\uff0c\u8fd9\u4e2a\u5c31\u662f\u7528\u6765<strong><span style=\"color: #ff0000;\">\u4e13\u95e8\u5bf9url\u8fdb\u884cbase64\u7f16\u89e3\u7801\u7684<\/span><\/strong>\uff0c\u5b9e\u9645\u4e0a\u4e5f\u662f\u8c03\u7528\u7684\u524d\u4e00\u7ec4\u51fd\u6570\u3002<\/p>\n<p>\u4e0b\u9762\u770b\u770b\u4f8b\u5b50\uff1a<\/p>\n<pre class=\"lang:default decode:true\">#-*- encoding:utf-8 -*-\r\nimport base64\r\nimport StringIO\r\n\r\na = \"this is a test\"\r\nb = base64.encodestring(a) # \u5bf9\u5b57\u7b26\u4e32\u7f16\u7801\r\nprint b\r\nprint base64.decodestring(b) # \u5bf9\u5b57\u7b26\u4e32\u89e3\u7801\r\n\r\nc = StringIO.StringIO()\r\nc.write(a)\r\nd = StringIO.StringIO()\r\ne = StringIO.StringIO()\r\nc.seek(0)\r\nbase64.encode(c, d) # \u5bf9StringIO\u5185\u7684\u6570\u636e\u8fdb\u884c\u7f16\u7801\r\nprint d.getvalue()\r\nd.seek(0)\r\nbase64.decode(d, e) # \u5bf9StringIO\u5185\u7684\u6570\u636e\u8fdb\u884c\u89e3\u7801\r\nprint e.getvalue()\r\n\r\na = \"this is a +test\"\r\nb = base64.urlsafe_b64encode(a) # \u8fdb\u884curl\u7684\u5b57\u7b26\u4e32\u7f16\u7801\r\nprint b\r\nprint base64.urlsafe_b64decode(b)<\/pre>\n<p>\u4e0a\u9762\u7684encode\u51fd\u6570\u548cdecode\u51fd\u6570\u7684\u53c2\u6570\u5176\u5b9e\u8fd8\u53ef\u4ee5\u662f\u6587\u4ef6\u5bf9\u8c61\u7684\uff0c\u90a3\u7684\u50cf\u8fd9\u6837\uff1a<\/p>\n<pre class=\"lang:default decode:true\">f1 = open('aaa.txt', 'r')\r\nf2 = open('bbb.txt', 'w')\r\nbase64.encode(f1, f2)\r\nf1.close()\r\nf2.close()<\/pre>\n<p>\u7528IPython\u8fdb\u884c\u67e5\u770b\u7684\u60c5\u51b5\u5982\u4e0b\uff1a<\/p>\n<h6>1.encode\u548cdecode<\/h6>\n<pre class=\"lang:default decode:true\">In [2]: base64.encode??\r\nType:        function\r\nString form: &lt;function encode at 0x02871770&gt;\r\nFile:        c:python27libbase64.py\r\nDefinition:  base64.encode(input, output)\r\nSource:\r\ndef encode(input, output):\r\n    \"\"\"Encode a file.\"\"\"\r\n    while True:\r\n        s = input.read(MAXBINSIZE)\r\n        if not s:\r\n            break\r\n        while len(s) &lt; MAXBINSIZE:\r\n            ns = input.read(MAXBINSIZE-len(s))\r\n            if not ns:\r\n                break\r\n            s += ns\r\n        line = binascii.b2a_base64(s)\r\n        output.write(line)<\/pre>\n<h6>2.encodestring\u548cdecodestring<\/h6>\n<pre class=\"lang:default decode:true\">In [3]: base64.encodestring??\r\nType:        function\r\nString form: &lt;function encodestring at 0x028717F0&gt;\r\nFile:        c:python27libbase64.py\r\nDefinition:  base64.encodestring(s)\r\nSource:\r\ndef encodestring(s):\r\n    \"\"\"Encode a string into multiple lines of base-64 data.\"\"\"\r\n    pieces = []\r\n    for i in range(0, len(s), MAXBINSIZE):\r\n        chunk = s[i : i + MAXBINSIZE]\r\n        pieces.append(binascii.b2a_base64(chunk))\r\n    return \"\".join(pieces)<\/pre>\n<h6>3.b64encode\u548cb64decode<\/h6>\n<pre class=\"lang:default decode:true\">In [4]: base64.b64encode??\r\nType:        function\r\nString form: &lt;function b64encode at 0x028714F0&gt;\r\nFile:        c:python27libbase64.py\r\nDefinition:  base64.b64encode(s, altchars=None)\r\nSource:\r\ndef b64encode(s, altchars=None):\r\n    \"\"\"Encode a string using Base64.\r\n\r\n    s is the string to encode.  Optional altchars must be a string of at least\r\n    length 2 (additional characters are ignored) which specifies an\r\n    alternative alphabet for the '+' and '\/' characters.  This allows an\r\n    application to e.g. generate url or filesystem safe Base64 strings.\r\n\r\n    The encoded string is returned.\r\n    \"\"\"\r\n    # Strip off the trailing newline\r\n    encoded = binascii.b2a_base64(s)[:-1]\r\n    if altchars is not None:\r\n        return _translate(encoded, {'+': altchars[0], '\/': altchars[1]})\r\n    return encoded<\/pre>\n<h6>4.urlsafe_b64encode\u548curlsafe_b64decode\uff08\u8c03\u7528\u7684\u4e5f\u662f\u4e0a\u9762\u7684b64encode\u548cb64decode\u51fd\u6570\uff09<\/h6>\n<pre class=\"lang:default decode:true \">In [6]: base64.urlsafe_b64encode??\r\nType:        function\r\nString form: &lt;function urlsafe_b64encode at 0x028715F0&gt;\r\nFile:        c:python27libbase64.py\r\nDefinition:  base64.urlsafe_b64encode(s)\r\nSource:\r\ndef urlsafe_b64encode(s):\r\n    \"\"\"Encode a string using a url-safe Base64 alphabet.\r\n\r\n    s is the string to encode.  The encoded string is returned.  The alphabet\r\n    uses '-' instead of '+' and '_' instead of '\/'.\r\n    \"\"\"\r\n    return b64encode(s, '-_')<\/pre>\n<p>&nbsp;<\/p>\n<h6>\u53c2\u8003\u94fe\u63a5\uff1a<\/h6>\n<ul>\n<li><a href=\"http:\/\/blog.csdn.net\/zhaoweikid\/article\/details\/1633470\" target=\"_blank\" rel=\"noopener\">python\u6a21\u5757\u4e4bbase64<\/a><\/li>\n<li><a href=\"http:\/\/blog.csdn.net\/magictong\/article\/details\/2687183\" target=\"_blank\" rel=\"noopener\">Base64 \u7f16\u7801\u539f\u7406\u7b80\u4ecb\u548cpython\u7684base64\u6a21\u5757\u7684\u4f7f\u7528<\/a><\/li>\n<li><a href=\"https:\/\/docs.python.org\/2\/library\/base64.html\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.python.org\/2\/library\/base64.html<\/a><\/li>\n<li><a href=\"http:\/\/www.ruanyifeng.com\/blog\/2008\/06\/base64.html\" target=\"_blank\" rel=\"noopener\">Base64\u7b14\u8bb0<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Python\u7684base64\u6a21\u5757\u662f\u7528\u6765\u4f5cbase64\u7f16\u89e3\u7801\u7684\u3002\u8fd9\u79cd\u7f16\u7801\u65b9\u5f0f\u5728\u7535\u5b50\u90ae\u4ef6\u4e2d\u662f\u5f88\u5e38\u89c1\u7684\u3002\u5b83\u53ef\u4ee5\u628a\u4e0d\u80fd\u4f5c [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,12],"tags":[369],"class_list":["post-1612","post","type-post","status-publish","format-standard","hentry","category-knowledgebase-2","category-tools","tag-base64"],"views":2936,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/1612","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=1612"}],"version-history":[{"count":1,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/1612\/revisions"}],"predecessor-version":[{"id":3955,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/1612\/revisions\/3955"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=1612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=1612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=1612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}