python中base64编码简介

目录
  • 1. base64编码简介
  • 2. python中使用base64
  • 3. 应用

1. base64编码简介

用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。

Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。Base64是一种用64个字符来表示任意二进制数据的方法,原理很简单,首先,准备一个包含64个字符的数组['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/'] ,然后,对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit,这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。

每组6位->6位二进制取值范围为:000000-111111(0-63)正好可以取到64个字符

所以,Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

2. python中使用base64

python中直接使用内置包base64即可,base64.b64encode base64.b64decode 分别是编码和解码

import base64
if __name__ == "__main__":
    bytes_str = b"i love beijing"
    # 编码
    # b'aSBsb3ZlIGJlaWppbmc='
    base64_string = base64.b64encode(bytes_str)
    print(base64_string)
    # 解码
    # b'i love beijing'
    source_str = base64.b64decode(base64_string)
    print(source_str)

由于标准的Base64编码后可能出现字符+/,在URL中就不能直接作为参数,所以又有一种url safe 的base64编码,其实就是把字符+/分别变成-_

bytes_str = b"i love tiananmen"
# 编码
base64_string = base64.urlsafe_b64encode(bytes_str)
print(base64_string)
# 解码
source_str = base64.urlsafe_b64decode(base64_string)
print(source_str)

注意:无论是哪种编码方式,输入到base64中的参数都是字节的形式,因此上方中参数byte_str前有个b

3. 应用

将图片(视频)编码成字符串
如下代码,将一张图片编码成字符串,后面我们可以将图片直接以字符串的形式保存到文件中,方便读取,因为有些情况下存取字符串会比直接保存图片方便,比如先把图片存放到数据库中

if __name__ == "__main__":
    import requests
    from PIL import Image
    from io import BytesIO
    import base64

    response = requests.get('https://ts1.cn.mm.bing.net/th/id/R-C.fd4056c8c00979ab8561f8db8219c2ae?rik=JPk67EIYaKIS3A&riu=http%3a%2f%2fimg.mm4000.com%2ffile%2fa%2fa2%2f869bd2bd6a.jpg&ehk=2z%2bPuRHJOYtkm9ICs8fPs0EJbE96jJX2E8QyrVP5kyQ%3d&risl=&pid=ImgRaw&r=0')
    if response.status_code != 200:
        raise ValueError("request Error!")
    # 将请求结果存入io中, 使用PIL以io的方式打开图片
    img = BytesIO(response.content)
    pict = Image.open(img)
    # 改变图像大小,也可是其他操作
    pict = pict.resize((100, 100), Image.ANTIALIAS)
    # 将图片存入io中, PIL格式的图片变成byte格式
    img_buff = BytesIO()
    pict.save(img_buff, "jpeg")
    # 使用base64把byte对象编码成字符串
    img_str = base64.urlsafe_b64encode(img_buff.getvalue())
    print("image string:", img_str.decode("utf-8"))
    img.close()

    # 将字符串解码成图片
    bytes_image = base64.urlsafe_b64decode(img_str)
    image_buff = BytesIO(bytes_image)
    image = Image.open(image_buff)
    image.show()

结果如下:

到此这篇关于python中base64编码的文章就介绍到这了,更多相关python base64编码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python简单实现Base64编码和解码的方法

    本文实例讲述了Python简单实现Base64编码和解码的方法.分享给大家供大家参考,具体如下: Base64编码是一种"防君子不防小人"的编码方式.广泛应用于MIME协议,作为电子邮件的传输编码,生成的编码可逆,后一两位可能有"=",生成的编码都是ascii字符. 优点:速度快,ascii字符,肉眼不可理解 缺点:编码比较长,非常容易被破解,仅适用于加密非关键信息的场合 Python Base64编码和解码示例: >>> import base6

  • Python Base64编码和解码操作

    Base64编码和解码 Base64 不是加密算法,只是一种编码方式,数据从一种形式转换为另一种形式进行传输/存储.Base64 就是一种基于64个可打印字符来表示二进制数据的方法.Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3.最后,用一个码表来得到我们想要的字符串,这就是 Base64编码.码表: 索引 对应字符 索引 对应字符 索引 对应字符

  • Python base64编码解码实例

    Python中进行Base64编码和解码要用base64模块,代码示例: #-*- coding: utf-8 -*- import base64 str = 'cnblogs' str64 = base64.b64encode(str) print str64 #Y25ibG9ncw== print base64.b64decode(str64) #cnblogs

  • Python实现base64编码

    Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法.Base64是一种最常见的二进制编码方法. Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文.网页等直接显示. Python内置的base64可以直接进行base64的

  • python密码学Base64编码和解码教程

    目录 Base64编码 编码程序 输出 解码程序 输出 差异在ASCII和base64之间 缺点 Base64编码 Base64编码将二进制数据转换为文本格式,通过通信通道传递,用户可以安全地处理文本. Base64也称为隐私增强电子邮件(PEM),主要用于电子邮件加密过程. Python包含一个名为 BASE64的模块其中包括下面给出的两个主要功能 : base64.decode(输入,输出) : 它解码指定的输入值参数并将解码的输出存储为对象. Base64.encode(输入,输出) ;它

  • Python中字符编码简介、方法及使用建议

    1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节

  • python中base64加密解密方法实例分析

    本文实例讲述了python中base64加密解密方法.分享给大家供大家参考.具体分析如下: 一.base64 Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符.三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示.它可用来作为电子邮件的传输编码.在Base64中的可打印字符包括字母A-Z.a-z.数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同.编码后的

  • python中set()函数简介及实例解析

    set函数也是python内置函数的其中一个,属于比较基础的函数.其具体介绍和使用方法,下面进行介绍. set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. set,接收一个list作为参数 list1=[1,2,3,4] s=set(list1) print(s) #逐个遍历 for i in s: print(i) 输出: set([1, 2, 3, 4]) 1 2 3 4 使用add(key)往集合中添加元素,重复的元素自动过滤 list1

  • 彻彻底底地理解Python中的编码问题

    Python处理文本的功能非常强大,但是如果是初学者,没有搞清楚python中的编码机制,也经常会遇到乱码或者decode error.本文的目的是简明扼要地说明python的编码机制,并给出一些建议. 问题1:问题在哪里? 问题是我们的靶子,心中没有问题去学习就会抓不住重点. 本文使用的编程环境是centos6.7,python2.7.我们在shell中键入python以打开python命令行,并键入如下两句话: s = "中国zg" e = s.encode("utf-8

  • Python实现base64编码的图片保存到本地功能示例

    本文实例讲述了Python实现base64编码的图片保存到本地功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 import os import base64 sss ="""/9j/4AAQSkZJRgABAQEASABIAAD//gAyUHJvY2Vzc2VkIEJ5IGVCYXkgd2l0aCBJbWFnZU1hZ2ljaywgejEuMS4wLiB8fEIy/9sAQwAGBAUGBQQGBgUGBwcGCAoQ

  • Python中base64与xml取值结合问题

    Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法.Base64是一种最常见的二进制编码方法. 具体代码如下所述: import base64 from xml.dom import minidom # 打开xml文件 dom=minidom.parse("D:\\pythonp\\t

  • 详解Python中的编码问题(encoding与decode、str与bytes)

    1 引言 在文件读写及字符操作时,我们经常会出现下面这几种错误: TypeError: write() argument must be str, not bytes AttributeError: 'URLError' object has no attribute 'code' UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' inposition 5747: illegal multibyte sequence 这些

  • java中Base64编码原理实例讲解

    什么是 Base64 编码 Base64 编码是最常见的编码方式,基于 64 个可打印字符来表示任意二进制数据的方法,是从二进制转换到可见字符的过程. 使用场景 数据加密或签名通过 Base64 转换为字符串存储或传输. 不能传输文件的网络环境可以转换 Base64 进行网络传输. 在文本资源(如 HTML 和 CSS文件)中嵌入图片文件或其他二进制资源. 在 URL.网页中传输少量二进制数据等等. Base64 编码原理 原理是把每 3 个字节(每个字节为 8 位, 3 个字节为 24 位)重

随机推荐