最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

print(parsed.query) # => wd=python3%20url编码

2、query参数编码

由于query参数对应的是GET请求时,附件在URL路径后的查询参数。为了避免浏览器解析到特殊字符而导致不可预知的问题,所以通常需要对其内容进行编码,称为URLEncode。Python3中编码的方式如下:

d = {

​ ‘name’: ‘陈霸天’,

​ ‘sex’: ‘male’,

​ ‘age’: 18

}

query = parse.urlencode(d)

print(query) # => name=%E9%99%88%E9%9C%B8%E5%A4%A9&sex=male&age=18

使用urlencode方法,可以很方便的对一个给定的字典对象的键值内容进行编码,并串联成一个有效格式的query字符串。可以直接附件到URL路径后来使用。(中间需要?链接)

3、query参数解码

有编码就有对应的解码方法,python3中其对应的解码方法不是urldecode,而是parse_qs方法。具体如下:

query = ‘name=%E9%99%88%E9%9C%B8%E5%A4%A9&sex=male&age=18’

d = parse.parse_qs(query)

print(d) # => {‘name’: [‘陈霸天’], ‘sex’: [‘male’], ‘age’: [‘18’]}

注意返回的字典中,其value值都是list对象。这是因为有些键可能有多个值的情况。(正常可能会发生的情况)

4、纯字符串URL编码

上面方法是对字典对象进行的编码,如果只需对单个字符串内容编码, 则可以使用quote方法。

s = ‘中国’

print(parse.quote(s)) # => %E4%B8%AD%E5%9B%BD

5、纯字符串URL解码

字符串的解码方法是和编码方法对应的叫unquote。使用方式如下:

s = ‘%E4%B8%AD%E5%9B%BD’

print(parse.unquote(s)) # => 中国

BASE64编解码

1、BASE64编码

BASE64是一种对二进制进行编码的一种方式;之所以叫BASE64编码是因为经过这个算法进行编码之后,其内容只在规定的64个可打印字符之内。(0-9、a-z、A-Z、+、/)。python3中对字符进行BASE64编码的方式如下:

import base64

src = ‘中国’.encode(‘utf8’)

print(“明文:”, src)

enc = base64.b64encode(src)

print(“密文:”, enc)

这段代码运行后的结果:

明文: b’\xe4\xb8\xad\xe5\x9b\xbd’

密文: b’5Lit5Zu9’

可以看到b64encode方法接收的是一个二进制类型的字符串,返回的也是一个二进制类型的字符串。

2、BASE64解码

同编码相反的就是解码了,BASE64的解码也很简单。

import base64

enc = b’5Lit5Zu9’

print(“密文:”, enc)

src = base64.b64decode(enc)

print(“明文:”, src)

print(“unicode:”, src.decode(‘utf8’))

执行后的代码如下:

密文: b’5Lit5Zu9’

明文: b’\xe4\xb8\xad\xe5\x9b\xbd’

unicode: 中国

3、BASE16编解码

base64库除了可以进行BASE64编码外,还可以支持BASE16编解码码。其使用方式如下:

import base64

src = ‘中国’.encode(‘utf8’)

print(“明文:”, src)

enc = base64.b16encode(src)

print(“密文:”, enc)

src = base64.b16decode(enc)

print(“明文:”, src)

print(“unicode:”, src.decode(‘utf8’))

执行结果如下:

明文: b’\xe4\xb8\xad\xe5\x9b\xbd’

密文: b’E4B8ADE59BBD’

明文: b’\xe4\xb8\xad\xe5\x9b\xbd’

unicode: 中国

与BASE64编码后的内容不同,BASE16的编码后内容其实是有规律的。仔细看下明文和密文,可以发现其实是一种对应关系。比如:明文中的\xe4,对应的是密文中的E4;以此类推。即BASE16只是把二进制在内存中的数值使用16进制字符串来表示而已。

AES加解密

1、AES加密

AES(Advanced Encryption Standard)是一种加密技术和标准。其实DES(Data Encryption Standard)加密的升级版。该加密算法是一种对称加密,即使用相同的key来进行加密和解密。Python3中进行AES加密的方式如下:

import base64

from Crypto.Cipher import AES

def ensure_to_16(value):

​ pad = 16 - len(value) % 16

​ return value + b’\x00’ * pad if pad != 16 else value

key = b’123456’

iv = b’ABCD’

src = ‘中国’.encode(‘utf8’)

AES ECB encrypt

aes = AES.new(ensure_to_16(key), AES.MODE_ECB)

print(‘src:’, src)

enc = aes.encrypt(ensure_to_16(src))

print(‘enc:’, enc)

base_str = base64.encodebytes(enc)

print(‘base_str:’, base_str)

AES CBC encrypt, need iv arg

aes = AES.new(ensure_to_16(key), AES.MODE_CBC, iv=ensure_to_16(iv))

print(‘src:’, src)

enc = aes.encrypt(ensure_to_16(src))

print(‘enc:’, enc)

base_str = base64.encodebytes(enc)

print(‘base_str:’, base_str)

上面的代码中需要说明的是,ensure_to_16主要作用是把key、iv、src等内容的长度补齐到16的整数倍。这个AES加密的标准要求,其中key、iv还可以是32、48等的整数倍,而src只能是16的整数倍。

另外,上面演示了2种加密类型,第一种是ECB,第二种CBC。其中第一种为不需要iv,第二种需要iv(初始化向量,俗称盐)参数。

代码执行效果如下:

src: b’\xe4\xb8\xad\xe5\x9b\xbd’

enc: b’3+z@P4\x98\x0c\x1d\x9a\xce#F\xdf\xec\x1d’

base_str: b’Myt6QFA0mAwdms4jRt/sHQ==\n’

src: b’\xe4\xb8\xad\xe5\x9b\xbd’

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐