python知识点解析

base64编码原理

*简单介绍

Base64是一种最常见的二进制编码方法。用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符。所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。
base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,用来将非ASCII字符的数据转换成ASCII字符的一种方法,因为某些系统中只能使用ASCII字符。Base64编码,它要求把每3个8Bit的字节转换为4个6Bit的字节,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。Base64编码可用于在HTTP环境下传递较长的标识信息,编码的数据不会被人用肉眼所直接看到,适用于小段内容的编码,比如数字证书签名、Cookie的内容等。

*编码原理

Base64编码表由64个字符组成,编码后的字符由表中字符组合而成,流程如下:

  1. base64的编码都是按字符串长度,以每3个8bit的字符为一组。
  2. 然后针对每组,首先获取每个字符的ASCII编码。
  3. 然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节。
  4. 然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节。
  5. 然后将这4个8bit的字节转换成10进制,对照Base64编码表,得到对应编码后的字符。

注:

  • 由于要求被编码字符是8bit,所以须在ASCII编码范围内,\u0000-\u00ff,中文就不行。
  • 由于2^6=64,而以1个6bit为一个单元,因此一定能在0~63的编码表中找到对应的编码!
  • Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。
    举例如下:
    在这里插入图片描述

* 简单Python实现

Python内置的base64可以直接进行base64的编解码:

1.在终端下的运行:在这里插入图片描述
编码与解码的处理对象是byte,故对原数据要先编码,使原本的str类型变成byte,解码后直接输出来的是byte对象,故要解码成str对象。
注:为了区别字符串,前缀b表示byte二进制。

  1. 在pycharm编辑器里的测试:

    有时编码结果会出现等号:
    在这里插入图片描述
    如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节。Base64会用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号(最多2个=号),表示补了多少字节,解码的时候,会自动去掉。
    因为Base64是把3个字节变为4个字节,所以,Base64编码的长度永远是4的倍数,因此,需要加上=把Base64字符串的长度变为4的倍数,就可以正常解码了。

在这里插入图片描述

Debug

是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围。
我觉得debug调试工具,对程序员来说很重要。我们能通过自己动手调试,从而发现自己程序的错误,从而高效有方向的修改代码。
在这里插入图片描述

Socket

  1. 介绍
    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
    网络中的进程是通过socket来通信的,socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
  2. socket的基本操作
    socket是“open—write/read—close”模式的一种实现,那么socket就提供了这些操作对应的函数接口。
  3. socket()函数
    int socket(int domain, int type, int protocol);
    socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值