程序地带

理想国Python加密入门教程


01.简介
我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes。所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错。将字符串和Bytes互相转换可以使用encode()和decode()方法
# 将字符串转换为字节数组
a = "中国欢迎您".encode("utf-8")
print(a) # b'xe4xb8xadxe5x9bxbdxe6xacxa2xe8xbfx8exe6x82xa8'
# 将字节数组转换为字符串
b = a.decode("utf-8")
print(b) # 中国欢迎您
02.自定义加密算法
import binascii
# 将字符串转换为字节数组
a = "中国欢迎您".encode("utf-8")
print(a) # b'xe4xb8xadxe5x9bxbdxe6xacxa2xe8xbfx8exe6x82xa8'
# 调用模块下的一个方法:b2a_hex
# 该方法的作用:将二进制的数据,转换为十六进制
c = binascii.b2a_hex('中国欢迎您'.encode())
print(c) # b'e4b8ade59bbde6aca2e8bf8ee682a8'
# 该方法的作用:将十六进制的数据转换为二进制
d = binascii.a2b_hex(c)
print(d) # b'xe4xb8xadxe5x9bxbdxe6xacxa2xe8xbfx8exe6x82xa8'
binascii.b2a_hex(二进制数据):将二进制数据转换为十六进制binascii.a2b_hex(十六进制数据):将十六进制的数据转换为二进制“字符串”.encode(“编码表”):将字符串按照指定编码转换为二进制数据二进制数据.decode(“编码表”):将二进制数据转换为字符串注意:binascii的导入方式import binascii

有了上面的知识点以后,我们就可以写自定义加密方法了。必须要先明确


加密:将我们易读易记的内容转换为很难理解的大段字符串解密:将加密后的大段字符串转换为我们容易理解的字符串(原本的内容)
# @日期:2021/1/15 21:57
# @公司:阿尔法工场
# @作者:张大鹏
# @昵称:lxgzhw
# @文件:test1.py
# @描述:自定义加密算法
import binascii
# 测试密码
test_password = 'lxgzhw'
def lxg_encrypt(password_str):
"""加密"""
# 第一步:将普通字符串转换为二进制的数据
temp = password_str.encode('utf8')
# 第二步:将二进制的数据转换为十六进制的数据
temp = binascii.b2a_hex(temp)
# 第三步:将十六进制的数据转换为字符串
temp = temp.decode('utf8')
# print(temp)
return temp
def lxg_decryption(password_str):
"""解密"""
# 第一步:将字符串转换为十六进制的数据
temp = password_str.encode('utf8')
# 第二步:将十六进制的数据转换为二进制的数据
temp = binascii.a2b_hex(temp)
# 第三步:将二进制的数据转换为普通字符串
temp = temp.decode('utf8')
# print(temp)
return temp
if __name__ == '__main__':
password_new = lxg_encrypt(test_password)
print("加密前的字符串:", 'lxgzhw')
print("加密后的字符串:", password_new)
password_orgin = lxg_decryption(password_new) # lxgzhw
print("解密后的字符串:", password_orgin)
03.url编码

实例1


from urllib import parse
# 将url字符串中的中文转换为浏览器能够识别的字符串
a = parse.quote("中国欢迎您")
print(a) # %E4%B8%AD%E5%9B%BD%E6%AC%A2%E8%BF%8E%E6%82%A8
# 将浏览器能够识别的字符串转换为普通的字符串
b = parse.unquote(a)
print(b) # 中国欢迎您

实例2


from urllib import parse
# 将url中的中文字符提取出来,转换为url加密串拼接
# 加密
url1 = 'https://www.baidu.com/s?ie=UTF-8&wd='
temp = parse.quote('理想国真恵玩')
url1 += temp
print(url1)
url2 = 'https://www.baidu.com/s?ie=UTF-8&wd=%E7%90%86%E6%83%B3%E5%9B%BD%E7%9C%9F%E6%81%B5%E7%8E%A9'
print(url2)
# 解密
temp = parse.unquote(url2)
print(temp)
04.Base64编码

what:是什么


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

原理


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

示例代码


import base64
# 准备字符串
temp = 'hello world'
# 转换为二进制
temp = temp.encode('utf8')
# 使用base64进行编码
a = base64.b64encode(temp)
print(a) # b'aGVsbG8gd29ybGQ='
# 使用base64解码
# 注意:这里得到的是二进制数据,需要再次进行转换
b = base64.b64decode(a)
print(b) # b"hello world"
# 将base64解码后的二进制转换为字符串
temp = b.decode('utf8')
print(temp)
05.MD5加密算法

简介


message-digest algorithm 5(信息-摘要算法)经常说的“MD5加密”,就是它:信息-摘要算法md5,其实就是一种算法可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串这个串,基本上是唯一的

不可逆性


每个人都有不同的指纹,看到这个人,可以得出他的指纹等信息,并且唯一对应但你只看一个指纹,是不可能看到或读到这个人的长相或身份等信息以上在描述:什么是不可逆性
可以将普通字符串转换为加密字符串不可以从加密字符串转换为普通字符串

特点


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

使用MD5的加密步骤


第一步:准备要加密的字符串第二步:调用hashlib.md5()方法创建md5加密对象:md5_obj第三步:使用md5_obj.update(str.encode(encoding=“编码表”)进行加密第四步:使用md5_obj.hexdigest()获取加密后的字符串
import hashlib
# 第一步:准备要加密的字符串
password = 'lxgzhw'
# 第二步:调用hashlib.md5()方法创建md5加密对象:md5_obj
md5 = hashlib.md5()
# 第三步:使用md5_obj.update(str.encode(encoding="编码表")进行加密
md5.update(password.encode('utf8'))
# 第四步:使用md5_obj.hexdigest()获取加密后的字符串
password_new = md5.hexdigest()
print("加密前的字符串:{}".format(password))
print("加密后的字符串:{}".format(password_new))
06.SHA加密

what:是什么


SHA1的全称是Secure Hash Algorithm(安全哈希算法)SHA1基于MD5,加密后的数据长度更长它对长度小于264的输入,产生长度为160bit的散列值。比MD5多32位因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了

基本用法


import hashlib
# 第一步:准备要加密的字符串
str = "中国你好"
# 第二步:进行加密
a = hashlib.sha1(str.encode("utf-8")).hexdigest()
print("sha1加密前为 :", str)
print("sha1加密前后 :", a)

使用sha256进行加密


import hashlib
# 第一步:准备要加密的字符串
str = "中国你好"
# 第二步:进行加密
a = hashlib.sha256(str.encode("utf-8")).hexdigest()
print("sha1加密前为 :", str)
print("sha1加密前后 :", a)
# 加密后的长度是:64位
temp = '314b8c01d5ab155484b7ee615b383dd550a726fdf38d7e6a0d3b35b82f79bbd1'
print(len(temp))

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37703224/article/details/112689375

随机推荐

性能测试工具jmter的学习与简单应用

性能测试工具jmter的学习与简单应用

jmeter了解与学习一、性能测试1、性能测试概念2、性能测试工具二、Jmeter简介1、为什么要使用Jmeter2、Jmeter的作用3、Jmeter的下载安装4、安装Java环境5、jemter的...

夜非明 阅读(610)

509. 斐波那契数

斐波那契数,通常用 F(n)表示,形成的序列称为斐波那契数列。该数列由 0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)...

7TribeZ 阅读(110)

1-1、MySQL数据库简介

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管...

Mr.zhangjie 阅读(784)