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字符串才会得到正确的结果.

  • 相关阅读:
    杭电 Problem
    杭电Problem 5053 the sum of cube 【数学公式】
    杭电 Problem 2089 不要62 【打表】
    杭电 Problem 4548 美素数【打表】
    杭电 Problem 2008 分拆素数和 【打表】
    杭电 Problem 1722 Cake 【gcd】
    杭电 Problem 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心】
    杭电Problem 1872 稳定排序
    杭电 Problem 1753 大明A+B
    东北林业大 564 汉诺塔
  • 原文地址:https://www.cnblogs.com/masako/p/6697751.html
Copyright © 2011-2022 走看看