zoukankan      html  css  js  c++  java
  • python[练习题]:实现Base64编码

    要求自己实现算法,不用库。

    Base64简介:

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

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

    转码过程例子:

    3*8=4*6

    内存1个字节占8位

    转前: s 1 3

    先转成ascii:对应 115 49 51

    2进制: 01110011 00110001 00110011

    6个一组(4组) 011100110011000100110011

    然后才有后面的 011100 110011 000100 110011

    然后计算机是8位8位的存数 6不够,自动就补两个高位0了

    所有有了 高位补0

    科学计算器输入 00011100 00110011 00000100 00110011

    Python实现Base64

      1 alphabet=b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
      2 def base64(src):
      3     ret = bytearray()
      4     length = len(src)
      5     # r记录补0的个数
      6     r = 0
      7     for offset in range(0, length,3):
      8         if offset + 3 <= length:
      9             triple = src[offset:offset+3]
     10         else:
     11             triple = src[offset:]
     12             r = 3 - len(triple)
     13             triple = triple + 'x00'*r
     14 
     15         print(triple.encode(),r)
     16         b = int.from_bytes(triple.encode(), 'big')
     17 
     18         for i in range(18, -1, -6):
     19             if i == 18:
     20                 index = b >> i
     21             else:
     22                 index = b >>i & 0x3F
     23             ret.append(alphabet[index])
     24 
     25         for i in range(1,r+1):
     26             ret[-i] = 0x3D
     27     return ret
     28 
     29 print(base64('abcde'))
     30 import base64
     31 print(base64.b64encode('abcde'.encode()))
     32 
    Python实现Base64
  • 相关阅读:
    C++ fstream 用法
    Servlet详解(转)
    JSP&Servlet(转)
    我们工作是为了什么!
    常见C C++问题(转)
    一份诚恳的互联网找工作总结和感想(附:怎样花两年时间去面试一个人)
    第一篇
    洛谷p1064 金明的预算方法
    onload、DOMContentLoaded与性能问题
    jsbin本地部署
  • 原文地址:https://www.cnblogs.com/bolenzhang/p/8366365.html
Copyright © 2011-2022 走看看