做开发第一个接触的编码方式就是Base64,当时是用url来传输一些参数,传输的两端会用Base64来编码和解码,保证数据不被url转义破坏。

下面是 维基百科 Base64 中的介绍,其实自己实现起来也不是很麻烦。

Base64 是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。

Shell中使用

一般Linux系统中都会有个base64的命令,openssl命令也有base64的选项。

base64 命令

字符串操作,更多参考 man base64

# echo "you are so cool"|base64
eW91IGFyZSBzbyBjb29sCg==

# echo "eW91IGFyZSBzbyBjb29sCg=="|base64 -d
you are so cool

#中文

# echo "你真帅"|base64
5L2g55yf5biFCg==

# echo "5L2g55yf5biFCg=="|base64 -d
你真帅

openssl命令

$ openssl enc -base64 <<< "good boy"
Z29vZCBib3kK

$ openssl enc -base64 -d <<< "Z29vZCBib3kK"
good boy

Python 使用base64

标准库中提供了base16,base32, base64 好几个接口,最常用的是 base64.b64encodebase64.b64decode ,还有针对于url的改进方式 base64.urlsafe_b64encodebase64.urlsafe_b64decode, 这一对方法和标准的base64不同的是针对url改善了64个字符中最后2个,具体的看这里的说明, 结合wiki中的 base64索引表 就明白了。

编码 和 解码

$ python -c "import base64; print base64.b64encode('you are so cool')"
eW91IGFyZSBzbyBjb29s

$ python -c "import base64; print base64.b64decode('eW91IGFyZSBzbyBjb29s')"
you are so cool

注意无法对unicode直接base64编码, 所以请注意字符编码问题。

# python -c "import base64; print base64.b64encode('酷')"
6YW3

# python -c "import base64; print base64.b64encode(u'酷')"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/base64.py", line 53, in b64encode
    encoded = binascii.b2a_base64(s)[:-1]
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

常用代码片段

经常使用的方式是对编码之后字符串结尾的 =做剔除 。对于 urlsafe_b64encodeb64encode 都适用,针对不同编程语言相互转化的情况请具体参照语言的实现方式。

import base64

def base64encode(raw):
    return base64.urlsafe_b64encode(raw).strip("=")

def base64decode(data):
    return base64.urlsafe_b64decode(data + "=" * (-len(data)%4))

阅读

Python和shell中Base64编码使用那些事的更多相关文章

  1. Javascript中Base64编码解码的使用实例

    Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码,分别是window.btoa()函数和window.atob()函数. 1 var encodedStr = win ...

  2. Python 读取文件中unicode编码转成中文显示问题

    Python读取文件中的字符串已经是unicode编码,如:\u53eb\u6211,需要转换成中文时有两种方式 1.使用eval: eval("u"+"\'" ...

  3. Python 中 base64 编码与解码

    base64 是经常使用的一种加密方式,在 Python 中有专门的库支持. 本文主要介绍在 Python2 和 Python3 中的使用区别: 在 Python2 环境: Python 2.7.16 ...

  4. python中base64编码与解码

    在python3中用base64进行编码和解码的时候特别注意: 题目要求: 准备一张.jpg图片,比如:mm.jpg,读取图片数据并通过b85encode加密之后写入到新文件mm.txt文件中,然后读 ...

  5. python在shell中环境变量使用

    1.用Python Shell设置或获取环境变量的方法: 设置系统环境变量 os.environ['环境变量名称']='环境变量值' #其中key和value均为string类型 os.putenv( ...

  6. 【python】网页中字符编码转换 unicode-escape

    有的时候我们用python来抓取网页会得到类似 '\\u003C\\u0066\\u0072\\u006F\\u006D\\u003E' 或者 '%u003c%u0062%u0072%u003e%u0 ...

  7. python[练习题]:实现Base64编码

    要求自己实现算法,不用库. Base64简介: Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多 ...

  8. linux shell 中文件编码查看及转换方法

    参考: http://edyfox.codecarver.org/html/vim_fileencodings_detection.html 一.查看文件编码.     在打开文件的时候输入:set ...

  9. python将图片转为base64编码

    import base64 f = open("m1.jpg", "rb") res = f.read() s = base64.b64encode(res) ...

随机推荐

  1. Struts 1之DispatchAction

    DispatchAction是struts 1 的内置通用分发器 import org.apache.struts.actions.DispatchAction; public class UserA ...

  2. 剑指Offer——丑数

    剑指Offer--丑数 前言     参照<剑指Offer>,通过洞悉其思想并消化吸收,改为java实现,供自己以后巩固. package cn.edu.ujn.offersword; i ...

  3. Maven原型骨架及常见问题

    关于Maven原型工程的制作就不在这里详细介绍了,具体细节请参考之前的文章:定制Maven原型生成项目 下面分享制作和使用Maven原型工程时碰到的常见问题,以及原型的上传和使用方法. 1.模块路径问 ...

  4. python访问redis

    python访问redis 1 Linux上安装redis a) 下载 $ wget http://download.redis.io/releases/redis-3.0.5.tar.gz b) 编 ...

  5. J2EE学习从菜鸟变大鸟之八 企业级项目开发的思考

    什么是企业级项目开发 "企业级项目".企业级项目开发,Java也是企业级项目开发,这个我们到处说.听,每天被我们挂在嘴边,可是到底什么项目才算是"企业级"?自己 ...

  6. Docker教程:dokcer的配置和命令

    http://blog.csdn.net/pipisorry/article/details/50803028 Docker命令查询 终端运行docker命令,它会打印所有可用的命令列表及使用描述:# ...

  7. python类:属性

    http://blog.csdn.net/pipisorry/article/details/50708616 Python 中的 property 属性 Python中有个很赞的概念,叫做prope ...

  8. ADO.NET常用方法释义

    先列个列表,下面的就是常用的数据库操作的方法. ExecuteNonQuery 释义:对链接执行的SQL语句,并返回受影响的行数(注意:用它来执行目录操作,如查询数据库的结构,创建表等数据库对象,或通 ...

  9. 95%的bug是由程序员造成的

    原文作者:Jeff Atwood 作者在Twitter上发的一条短讯: "在怨天尤人之前,我们应该先自我反省.努力把自身的问题解决了." 12:22 PM –2012-5-30 你 ...

  10. Cocos2D中图片加-hd后缀的说明

    你可能注意到实际上游戏中的sprite都有2张图片,它都对应该精灵,并包含在资源包中(resource pack): player.png(27x40 pixels)和player-hd.png(do ...