• base64的python实现


    写了一个函数,自己按照base64的规则转换一个字符串.

     1 # /usr/bin/python
     2 # encoding: utf-8
     3 base64_table = ['A', 'B', 'C', 'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
     4                 'a', 'b', 'c', 'd','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
     5                 '0', '1', '2', '3','4','5','6','7','8','9',
     6                 '+', '/', '=']
     7 
     8 def encode_b64(s):
     9     l = len(s)
    10     i = 0
    11     result = ''
    12     while i < l:
    13         # 将字符转换为二进制编码,然后对齐
    14         s1 = s[i]
    15         b1 = bin(ord(s1))[2:]
    16         cb1 = b1.rjust(8, '0')
    17 
    18         i += 1
    19         if i >= l:
    20             cb2 = '00000000'
    21         else:
    22             s2 = s[i]
    23             b2 = bin(ord(s2))[2:]
    24             cb2 = b2.rjust(8, '0')
    25 
    26         i += 1
    27         if i >= l:
    28             cb3 = '00000000'
    29         else:
    30             s3 = s[i]
    31             b3 = bin(ord(s3))[2:]
    32             cb3 = b3.rjust(8, '0')
    33 
    34         # 将三字节转换为四字节
    35         cb = cb1 + cb2 + cb3
    36 
    37         rb1 = cb[:6]
    38         rb2 = cb[6:12]
    39         rb3 = cb[12:18]
    40         rb4 = cb[18:]
    41 
    42         # 转换后的编码转为十进制备用
    43         ri1 = int(rb1, 2)
    44         ri2 = int(rb2, 2)
    45         ri3 = int(rb3, 2)
    46         ri4 = int(rb4, 2)
    47 
    48         # 处理末尾为0的情况,以'='填充
    49         if i - 1 >= l and ri3 == 0:
    50             ri3 = -1
    51 
    52         if i >= l and ri4 == 0:
    53             ri4 = -1
    54 
    55         result += base64_table[ri1] + base64_table[ri2] + base64_table[ri3] + base64_table[ri4]
    56 
    57         i += 1
    58 
    59     return result

    基本没什么算法,无脑迎合base64的规则即可.

    自己的用处主要是将网页上的btoa转换的字符串,自己转换一遍,方便爬虫模拟发送数据.

    为什么不用python自带的base64模块?

    因为经过自己的测试,发现python的base64模块加密出来的数据和js的base64加密的结果不一样,百度的各种base64在线编码和python结果是一样的.猜想是由于语言内部的编码方式不一样.也查过一些资料,有的其他语言也有这种情况,但都没有提出好的解决办法,只好自己动手,虽然代码很挫,用起来还是不错的.

    这份代码python2和python3都可以用,python3传入字符串即可,python2需要传入u''开头的,也就是unicode字符串才会得到正确的结果.

  • 相关阅读:
    nginx 安全请求头
    使用citus 列式存储压缩数据
    nginx ngx_http_realip 的功能以及使用
    act 的密钥&&环境变量管理
    oracle怎么查询重复的数据
    如何在Oracle中复制表结构和表数据
    2022成都.NET开发者Connect线下活动
    闭包具有逻辑内聚的功能
    编程范式是人类思维方式的投影代表了程序设计者认为程序应该如何被构建和执行的看法
    工程师是高级生产者
  • 原文地址:https://www.cnblogs.com/masako/p/6697751.html
Copyright © 2020-2023  润新知