zoukankan      html  css  js  c++  java
  • Python模块-base64

    base64模块方法:

      [
    'encode', 'decode', 'encodebytes', 'decodebytes',
    'b64encode', 'b64decode', 'b32encode', 'b32decode',
    'b16encode', 'b16decode',
    'b85encode', 'b85decode', 'a85encode', 'a85decode',
    'standard_b64encode', 'standard_b64decode',
    'urlsafe_b64encode', 'urlsafe_b64decode',
      ]

    这里讲解b64encode', 'b64decode', 'encodebytes', 'decodebytes'这四个方法,比较常用。

    import base64
    
    s1 = b'Hello World' #字节字符串
    a1 = base64.b64encode(s1) #base64编码字节字符串
    print('a1', a1)
    b1 = base64.b64decode(a1) #base64解码,返回原字节字符串
    print('b1', b1.decode()) #将字节字符串转换为字符串
    print('------')
    
    s2 = b'Hello World' #字节字符串
    a2 = base64.encodebytes(s2) #base64编码成多行字节字符串
    print('a2', a2)
    b2 = base64.decodebytes(a2) #base64解码,返回原字节字符串
    print('b2', b2.decode()) #将字节字符串转换为字符串
    print('------')

    log:

    a1 b'SGVsbG8gV29ybGQ='
    b1 Hello World
    ------
    a2 b'SGVsbG8gV29ybGQ=
    '
    b2 Hello World
    ------

    下面是廖雪峰关于base64编码的原理:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001399413803339f4bbda5c01fc479cbea98b1387390748000

    Base64是一种用64个字符来表示任意二进制数据的方法。

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

    Base64的原理很简单,首先,准备一个包含64个字符的数组:

    ['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
    

    然后,对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit:

    base64-encode

    这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。

    所以,Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。

    如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

  • 相关阅读:
    Leetcode Plus One
    Leetcode Swap Nodes in Pairs
    Leetcode Remove Nth Node From End of List
    leetcode Remove Duplicates from Sorted Array
    leetcode Remove Element
    leetcode Container With Most Water
    leetcode String to Integer (atoi)
    leetcode Palindrome Number
    leetcode Roman to Integer
    leetcode ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/keqipu/p/7227640.html
Copyright © 2011-2022 走看看