1.encode()和decode()

我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes(字节)
所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错。
将字符串和Bytes互相转换可以使用encode()和decode()方法。
如下所示:

# 方法中不传参数则是以默认的utf-8编码进行转换
str_encode = "解除隔离吧!上帝".encode("utf-8")
print(str_encode)str_decode = str_encode.decode("utf-8")
print(str_decode)

运行结果:

b'\xe8\xa7\xa3\xe9\x99\xa4\xe9\x9a\x94\xe7\xa6\xbb\xe5\x90\xa7\xef\xbc\x81\xe4\xb8\x8a\xe5\xb8\x9d'
解除隔离吧!上帝

2.binascii模块

binascii模块主要用于二进制和ASCII互相转换(Convert between binary and ASCII ),在编码和解码领域通常将十六进制显示的字节转换成我们在加解密中更常用的显示方式。
常用的方法:

函数 描述
b2a_hex(data) 将二进制数据转换成16进制的表现形式
a2b_hex(data) 将16进制的格式数据转换成二进制形式
a2b_base64(string) 将base64的数据转换为二进制数据,并返回该二进制数据
b2a_base64(string) 将二进制数据转换成base64格式的数据

更详细可以参考博客:Python binascii模块

代码演示:

import binasciistr_encode = "解除隔离吧!上帝".encode("utf-8")
bin_hex = binascii.b2a_hex(str_encode)
print("bin_hex :", bin_hex)a2b_hex = binascii.a2b_hex(bin_hex)
print("a2b_hex:", a2b_hex)v = binascii.a2b_hex(bin_hex).decode("utf-8")
print(v)
b = str_encode.decode("utf-8")
print(b)

测试结果:

bin_hex : b'e8a7a3e999a4e99a94e7a6bbe590a7efbc81e4b88ae5b89d'
a2b_hex: b'\xe8\xa7\xa3\xe9\x99\xa4\xe9\x9a\x94\xe7\xa6\xbb\xe5\x90\xa7\xef\xbc\x81\xe4\xb8\x8a\xe5\xb8\x9d'
解除隔离吧!上帝
解除隔离吧!上帝

3.URL编码

3.1 简介
正常的URL中是只能包含ASCII字符的,也就是字符、数字和一些符号。而URL编码就是一种浏览器用来避免url中出现特殊字符(如汉字)的编码方式。其实就是将超出ASCII范围的字符转换成带%的十六进制格式。

3.2 URL为何要编码、解码

通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据。对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。

例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。

又如,Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。

方法 说明
urllib.quote(url) 对url进行编码
urllib.unquote(deurl) 对已经url编码的解码

代码演示:

from urllib import parsea = parse.quote("赶紧解封吧!")
print(a)
b = parse.unquote(a)
print(b)

运行结果:

%E8%B5%B6%E7%B4%A7%E8%A7%A3%E5%B0%81%E5%90%A7%EF%BC%81
赶紧解封吧!

4.Base64编码

4.1简介

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

Base64编码可以成为密码学的基石。可以将任意的二进制数据进行Base64编码。所有的数据都能被编码为并只用65个字符就能表示的文本文件。( 65字符:A~Z a~z 0~9 + / = )编码后的数据~=编码前数据的4/3,会大1/3左右。

4.2 Base64编码的原理

  • 将所有字符转化为ASCII码。
  • 将ASCII码转化为8位二进制 。
  • 将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位。
  • 统一在6位二进制前补两个0凑足8位。
  • 将补0后的二进制转为十进制。
  • 从Base64编码表获取十进制对应的Base64编码。

4.3 Base64编码的说明

  • 转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。
  • 数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。
  • 不断进行,直到全部输入数据转换完成。
  • 如果最后剩下两个输入数据,在编码结果后加1个“=”。
  • 如果最后剩下一个输入数据,编码结果后加2个“=”。
  • 如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

4.4 Python的Base64使用

Python内置的base64模块可以直接进行base64的编解码
注意:用于base64编码的,要么是ASCII包含的字符,要么是二进制数据

import base64
str11 = "赶紧解封吧!"
en_str = base64.b64encode(str11.encode())
print(en_str)de_str = base64.b64decode(en_str).decode()
print(de_str)

输出:

b'6LW257Sn6Kej5bCB5ZCn77yB'
赶紧解封吧!

5.MD5(信息-摘要算法)

5.1 简述
message-digest algorithm 5(信息-摘要算法)。经常说的“MD5加密”,就是它→信息-摘要算法。

md5,其实就是一种算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一的。

5.2 不可逆性

每个人都有不同的指纹,看到这个人,可以得出他的指纹等信息,并且唯一对应,但你只看一个指纹,是不可能看到或读到这个人的长相或身份等信息。

5.3 特点

  • 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  • 容易计算:从原数据计算出MD5值很容易。
  • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  • 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

5.4 Python的MD5使用

import hashlib# 待加密信息
str = '赶紧解封吧!'
# 创建md5对象,
# md5对象,md5不能反解,但是加密是固定的,就是关系是一一对应,所以有缺陷,可以被对撞出来
hl = hashlib.md5()
# 要对哪个字符串进行加密,就放这里
# 此处必须声明encode
# 若写法为hl.update(str)  报错为: Unicode-objects must be encoded before hashing
hl.update(str.encode(encoding='utf-8'))print('MD5加密前为 :' + str)
# hl.hexdigest()) # 拿到加密字符串
print('MD5加密后为 :' + hl.hexdigest())hash3 = hashlib.md5(bytes('abd', encoding='utf-8'))
'''
如果没有参数,所以md5遵守一个规则,生成同一个对应关系,如果加了参数,
就是在原先加密的基础上再加密一层,这样的话参数只有自己知道,防止被撞库,
因为别人永远拿不到这个参数
'''
hash3.update(bytes("admin", encoding="utf-8"))
print(hash3.hexdigest())  # 9aea3c0a6c51555c1a4d0a5e9b689ded

运行结果:

MD5加密前为 :赶紧解封吧!
MD5加密后为 :3d2d2e10bcd07a1d5d94a7d35c0b7c79
9aea3c0a6c51555c1a4d0a5e9b689ded

MD5不仅仅是上面这个例子这样用来处理字符串,还有更广泛的用途:

  • 加密网站注册用户的密码。
  • 网站用户上传图片 / 文件后,计算出MD5值作为文件名。(MD5可以保证唯一性)
  • key-value数据库中使用MD5值作为key。
  • 比较两个文件是否相同。(大家在下载一些资源的时候,就会发现网站提供了MD5值,就是用来检测文件是否被篡改)

5.5 MD5长度

md5的长度,默认为128bit,也就是128个0和1的二进制串。这样表达是很不友好的。所以将二进制转成了16进制,每4个bit表示一个16进制,所以128/4 = 32 换成16进制表示后,为32位了。

为什么网上还有md5是16位的呢?
其实16位的长度,是从32位md5值来的。是将32位md5去掉前八位,去掉后八位得到的。

Python 中的url,Base64和MD5编码解码的使用相关推荐

  1. python中的URL编码和解码

    python中的URL编码和解码:test.py 1 # 引入urllib的request模块 2 import urllib.request 3 4 url = 'https://www.douba ...

  2. python中url是什么_怎么在Python中实现URL的解析

    怎么在Python中实现URL的解析 发布时间:2020-08-24 17:56:47

  3. python 测试字符串类型_【教程】如何用Python中的chardet去检测字符编码类型

    [背景] 之前已经使用过chardet了,也算用了不少次了. 之前也写过和chardet相关的: 但是没写教程,举例说明如何使用. 现在去举例解释解释. [python示例代码演示如何用chardet ...

  4. Python中验证URL是否可以访问

    Python中验证URL是否可以访问 今天下午的时候写RPC接口自动化的时候需要验证研发传过来的URL是否可以访问,由于自己是个垃圾,没写过Python,只是这段时间学了点Java,后通过度娘与Goo ...

  5. Python中常用的文本转义及编码

    每种语言都有其关键字和保留字符,这样为了能这些特殊字符能正常显示,就需要转义,如Python中\n代表回车,HTML中 代表空格等等. Python中的''是转义控制符,如果要表达\本身则需要使用'' ...

  6. 性能测试初学_loadrunner base64/md5 编码 解码

    参考这3篇文章: MD5: http://bbs.51testing.com/forum.php?mod=viewthread&tid=1111323 base64: http://www.c ...

  7. URL详细分析及在python中处理URL

    文章目录 URL URL介绍 URL案例 URL处理 urlparse方法 urlsplit方法 urlunparse方法 urlunsplit方法 urljoin方法 URL序列化与反序列化 其他相 ...

  8. python中根据URL获得数据库的名称及IP

    URL样例: # url 示例1 jdbc:oracle:thin:@172.16.2.32/orclis   # url 示例2 jdbc:oracle:thin:@172.16.2.31:1521 ...

  9. Java Base64加密解密编码解码

    起因 最近因为项目要做等保,需要对用户提交的字段进行加密存储,但是还需要做查询,所以需要能解密. 办法 目前打算采用rsa非对称加密保存数据,实现数据加密和解密,但是很尴尬的发现生成的公钥和秘钥居然是 ...

最新文章

  1. 2021最新版 SpringBoot 速记教程
  2. 使用 XML 时尽量避免使用的技术
  3. Android 计算Bitmap大小
  4. redis多服务器共享_【数据库】Redis(二)持久化及事务
  5. Grafana+Prometheus系统监控之MySql
  6. txt文件可存储最大值_Verilog边码边学:十六进制文件读取$readmemh
  7. hive 日期函数_数据分析面试必备——SQL窗口函数你会了吗?
  8. 【个人笔记】OpenCV4 C++ 快速入门 23课
  9. java中 uri的格式_URI与URL详解
  10. No plugin found for prefix 'mybatis-generator' in the current project ORA-28040: No matching authen
  11. 论文发表都有哪些期刊
  12. Ubuntu18.04 PulseAudio实战
  13. 梵曦诺(莫七七)店铺案例分析
  14. Numerical Analysis(by Timothy Sauer) Notes
  15. 机器学习在网络安全领域的应用(二)
  16. 预测:原理与实践(第二版)2021/05/01 第一次更新
  17. STM32F105双CAN双FIFO通讯心得体会
  18. 电脑水冷风扇转速太高怎么调?
  19. 基于遗传算法优化神经网络结构源程序
  20. 【转】编写游戏人物、剧情、对话的8大经验总结

热门文章

  1. feign-hystrix的使用
  2. 河南职称计算机啥时间考试,河南省2020年高级职称考试时间与具体安排
  3. mysql 秒杀 隔离级别_MySQL 四种隔离级别详解,看完吊打面试官
  4. Activemq-In-action(二)
  5. Spring WebApplicationContext
  6. java 组合代码_java实现Composite组合模式的实例代码
  7. linux防火墙阻断目的,基于Linux防火墙的内部邮件监控与阻断系统
  8. Ubuntu 华为开源镜像站 Mirror
  9. 修改Tomcat7的/webapps/ROOT发布路径
  10. 从一个字符串中剔除连续的字符,只留一个。