zoukankan      html  css  js  c++  java
  • 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字符串才会得到正确的结果.

  • 相关阅读:
    【心情】12月22日
    【心情】12月12日
    【心情】12月8日
    【转载】信息学竞赛知识地图
    SharePoint 2013 工作流之年假审批Designer配置篇
    SharePoint 2013 状态机工作流之扩展自定义状态
    SharePoint 2013 状态机工作流之UpdateItemActivity
    SharePoint 2013 状态机工作流之日常报销示例
    SharePoint 2013 对二进制大型对象(BLOB)进行爬网
    SharePoint 2013 图文开发系列之应用程序页
  • 原文地址:https://www.cnblogs.com/masako/p/6697751.html
Copyright © 2011-2022 走看看