您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python实现各种加密,接口加解密不说难

时间:2021-12-21 09:20:45  来源:  作者:Python可乐

Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python/ target=_blank class=infotextkey>Python实现各种 加密 ,接口加解密再也不愁。

目录

一、项目加解密需求分析

六、Python加密库PyCryptodome

一、项目加解密需求分析

1、网络数据传输面临的问题

私信小编01即可获取大量Python学习资源

网络安全涉及很多方面,而网络数据的安全传输通常会面临以下几方面的威胁。

  • 数据窃听与机密性:怎样保证数据不会因为被截获或窃听而暴露?
  • 数据篡改与完整性:怎样保证数据不会被恶意篡改?
  • 身份冒充与身份验证:怎样保证数据交互双方的身份没有被冒充?

2、解决方案

针对网络数据安全问题,可以用以下几种数据加密方式来解决(每种数据加密方式有多种不同的算法实现):

数据加密方式

描述

主要解决的问题

常用算法

对称加密

指数据加密和解密使用相同的密钥

数据的机密性

DES, AES

非对称加密

也叫公钥加密,指数据加密和解密使用不同的密钥--密钥对儿

身份验证

DSA,RSA

单向加密

指只能加密数据,而不能解密数据

数据的完整性

MD5,SHA系列算法

3、Python加密模块

主要用到以下几个模块:

模块名

描述

hashlib

主要提供了一些常见的单向加密算法(如 MD5 , SHA 等),每种算法都提供了与其同名的函数实现。

hmac

提供了hmac算法的实现,hamc也是单向加密算法,但是它支持设置一个额外的密钥(通常被称为'salt')来提高安全性

secrets

这是Python3.6中新增的模块,用于获取安全随机数。

base64

该模块主要用于二进制数据与可打印ASCII字符之间的转换操作,它提供了基于Base16, Base32, 和Base64算法以及实际标准Ascii85和Base85的编码和解码函数。

pycrypto

支持单向加密、对称加密和公钥加密以及随机数操作,这是个第三方模块,需要额外安装。

4、字符串和Bytes互相转化

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

(1) 使用encode()编码

encode():str对象的方法,用于将字符串转换为二进制数据(即bytes),也称为“编码”。

Python实现各种加密,接口加解密不说难

 

输出结果:

原字符: ITester软件测试小栈
字符转换成二进制: b'ITesterxc8xedxbcxfexb2xe2xcaxd4xd0xa1xd5xbb'

(2) 使用decode()解码

decode():bytes对象的方法,用于将二进制数据转换为字符串,也称为“解码”。

Python实现各种加密,接口加解密不说难

 

在设置解码采用的字符编码时,需要与编码时采用的字符编码一致。使用decode()方法时,同样不会修改原字符串。

二、Base64加密

1、简介

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

2、编码原理

1.将所有字符转化为ASCII码。

2.将ASCII码转化为8位二进制 。

3.将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位。

4.统一在6位二进制前补两个0凑足8位。

5.将补0后的二进制转为十进制。

6.从Base64编码表获取十进制对应的Base64编码。

3、Python中base64的使用

Python内置的base64模块可以直接进行base64的编解码 。

Python实现各种加密,接口加解密不说难

 

输出结果:

加密前为 :ITester软件测试小栈
加密后为:SVRlc3Rlcui9r+S7tua1i+ivleWwj+agiA==

三、MD5加密

1、简介

MD5加密即message-digest algorithm 5(信息-摘要算法),即信息-摘要算法,可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。

2、用途

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

3、 Python中MD5的使用

由于MD5模块在python3中被移除,在python3中使用hashlib模块进行md5操作。

(1) 简单示例

Python实现各种加密,接口加解密不说难

 

输出结果:

加密前为 :ITester软件测试小栈
加密后为:45dc3931b34133a1ebd17e376884b35b

(2) 登录接口加密

md5进行用户登录网站进行密码加密的示例:

import socket, struct, json

ip_port = ("127.0.0.1", 8000)
back_log = 5
buffer_size = 1024
tcp_client = socket.socket(socket.AF_.NET, socket.SOCK_STREAM)
tcp_client.connect(ip_port)

while True:
    cmd = input(">>>:")
    if not cmd: continue
    # 发送数据
    tcp_client.send(cmd.encode("gbk"))
    # 第一步:先收报头
    header = tcp_client.recv(4)
    # 第二步:从报头中解析(header数据的长度)
    header_size = struct.unpack("i", header)
    print('收到报头长度=', header_size)
    # 第三步:收到报头解析出对真实数据的描述信息
    header_json = tcp_client.recv(header_size)
    data = json.loads(header_json)
    print('收到报头内容=', data)
    total_size = data['total_size']

    # 第三步:接收真实的数据
    recv_size = 0
    recv_data = b""
    while recv_size < total_size:
        data = tcp_client.recv(buffer_size)
        recv_data += data
        recv_size = len(recv_data)

    print('接收数据 =', recv_data.decode('gbk', 'ignore'))  # 如果设置为ignore,则会忽略非法字符;

tcp_client.close()  # 关闭

四、sha1加密

1、简介

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

2、 Python中Sha1的使用

示例如下:

Python实现各种加密,接口加解密不说难

 

输出结果:

加密前为 :ITester软件测试小栈
加密后为:e933b46df326c0bb27cf075faf1d05eb92185f13

五、secrets加密

1、简介

secrets模块是Python 3.6新增的内置模块,它可以生成用于管理密码、账户验证信息、安全令牌和相关秘密信息等数据的密码强随机数。总体来讲,我们可以通过secrets模块完成两种操作:

  • 生成安全随机数;
  • 生成一个笃定长度的随机字符串,可用作令牌和安全URL;

2、 Python中secrets的使用

(1) 生成随机密码

生成一个由数字和字母组成的随机8位密码:

Python实现各种加密,接口加解密不说难

 

输出结果:

I4S8Nn81

(2) 生成包含安全令牌的URL

生成一个用于找回密码应用场景的,包含一个安全令牌的的临时URL。

Python实现各种加密,接口加解密不说难

 

输出结果:

https://ITester.com/reset=-b81gTnkWHaOyIKqv_EISLD1eHfYz8X5ptgYfhMBnbk

六、Python加密库PyCryptodome

1、简介

PyCrypto是 Python 中密码学方面最有名的第三方软件包,2012年已停止。幸运的是,该项目的分支PyCrytodome 取代了 PyCrypto。

2、DES加密

(1) 简介

DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准。DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。

(2) 使用

安装和导入:

安装:pip install pyDes
导入:from pyDes import des, CBC, PAD_PKCS5

示例:

from pyDes import des, CBC, PAD_PKCS5
import binascii

# 秘钥
KEY = 'keiHG$93'

def des_encrypt(s):
    """
    DES 加密
    :param s: 原始字符串
    :return: 加密后字符串,16进制
    """
    secret_key = KEY  # 密码
    iv = secret_key  # 偏移
    # secret_key:加密密钥,CBC:加密模式,iv:偏移, padmode:填充
    des_obj = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    # 返回为字节
    secret_bytes = des_obj.encrypt(s, padmode=PAD_PKCS5)
    # 返回为16进制
    return binascii.b2a_hex(secret_bytes)


def des_descrypt(s):
    """
    DES 解密
    :param s: 加密后的字符串,16进制
    :return:  解密后的字符串
    """
    secret_key = KEY
    iv = secret_key
    des_obj = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    decrypt_str = des_obj.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
    return decrypt_str

print(des_encrypt("ITester"))
print(des_descrypt("b248ebd299b31dd1"))

输出结果:

b'b248ebd299b31dd1'
b'ITester'

3、3DES加密

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称,是DES向AES过渡的加密算法。

4、AES加密

高级加密标准(Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法。速度快,编码紧凑。

from Cryptodome.Cipher import AES
from Cryptodome import Random
from binascii import  a2b_hex


data = 'ITester软件测试小栈'
#密钥必须为16(AES-128),24,32
key = b'this is a 16 key'

#生成长度等于AES块大小的不可重复的密钥向量
iv =Random.new().read(AES.block_size)
print(iv)

#使用key和Iv初始化AES对象
mycipher = AES.new(key,AES.MODE_CFB,iv)
print(mycipher)
cip = mycipher.encrypt(data.encode())

#将iv加到加密的密钥开头
ciptext =iv + cip
print(ciptext)

#解密需要 key和iv 生成AES对象,取前16位是iv
mydecrypt = AES.new(key,AES.MODE_CFB,ciptext[:16])

#取后16位是密钥
decrytext = mydecrypt.decrypt(ciptext[16:])
print(decrytext.decode())

输出结果:

b'"xcbHzxd1>x08pxddxbcxf3Cx87lxf3xe5'
<Cryptodome.Cipher._mode_cfb.CfbMode object at 0x10df91eb0>
b'"xcbHzxd1>x08pxddxbcxf3Cx87lxf3xe5x0exdcx8fx1bxc0xe5Uxc6xa5'x7f*xa0x8bxa3xebUxefxbcxd7jx05d4x05'
ITester

七、RSA加密

1、简介

RSA加密算法是一种非对称加密算法, 使用openssl ,keytools等工具生成一对公私钥对,使用被公钥加密的数据可以使用私钥来解密。

示例:

import rsa

# rsa加密
def rsaEncrypt(str):
    # 生成公钥、私钥
    (pubkey, privkey) = rsa.newkeys(512)
    print("公钥: ", pubkey)
    print("私钥: ", privkey)
    # 明文编码格式
    content = str.encode('utf-8')
    # 公钥加密
    crypto = rsa.encrypt(content, pubkey)
    return (crypto, privkey)

# rsa解密
def rsaDecrypt(str, pk):
    # 私钥解密
    content = rsa.decrypt(str, pk)
    con = content.decode('utf-8')
    return con

(a, b) = rsaEncrypt("ITester软件测试小栈")
print('加密后密文:')
print(a)
content = rsaDecrypt(a, b)
print('解密后明文:')
print(content)

输出结果:

公钥:  PublicKey(6814529323241172850728335141247508717269277267494229901386594011231139785660903876597435728831384748788754841049799215688731419667333062231824933307206319, 65537)
私钥:  PrivateKey(6814529323241172850728335141247508717269277267494229901386594011231139785660903876597435728831384748788754841049799215688731419667333062231824933307206319, 65537, 6454447002622527176039652037136241453160399729960737093529936320752579012730277408644466653521211901816393814636252571192738395899494415991466200889769361, 4797673045355672432997022168818242182770881041225501784151212772936794554333725043, 1420382185034032902338315580117109933359732257353521366383139403561669333)
加密后密文:
b'kx81x06x95xbb7x1bx7fxd2xafx97x0f,xfexa5xf3`$>x07x98:x9axcbxbax13xf9xc1x1cx18x193|xe2?xa2sxc71x9axf1xeeVx0c%PBFxddxdbxf3xbfhOxd0xcdx06}Tx18xc5xa82x0b'
解密后明文:
ITester

八、总结

上面讲了多种加密方法,我们简单总结下:

  • 数据加密方式大体分为3类:单向加密、对称加密和公钥加密(非对称加密)。
  • 这3类加密方式都各自包含不同的加密算法,如单向加密方式中包含MD5、SHA1、SHA256等,这些算法又称为“哈希算法”或“散列算法”或“数据摘要算法”。
  • Python内置的hashlib和hmac只提供了单向加密的各种算法实现,如果要做对称加密或者公钥加密操作需要安装第三方扩展模块,常用的是pycrypto模块。另外,hmac允许在使用哈希算法计算数据摘要时使用一个密钥。
  • 随机数操作可以通过三个模块来实现,Python内置的random模块和secrets模块(Python 3.6中才可用),还可以通过pycrypto模块中的Crypto.Random子包中的模块来完成。
  • base64只适合编码小段数据,且不能用于数据加密(算法是公开的,且没有密钥,所有人都可以解码)。
  • pycrypto是一个加密算法库,几乎所有的加密算法都可以在它里面找到相应的实现模块。


Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  Tags: Python  点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  Tags: Python  点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  Tags: Python  点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  Tags: Python  点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  Tags: Python  点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  Tags: Python  点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  Tags: Python  点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  Tags: Python  点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  Tags: Python  点击:(28)  评论:(0)  加入收藏
假设某日我开了一家空调公司,暂且就叫他天强空调安装设备公司吧,假装自己有公司,接了一单大生意,就是给甘肃省的各个高校安装空调(其实这边的气候基本用不到空调,就是假想一下),那么...【详细内容】
2022-07-01  Tags: Python  点击:(33)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条