在自动化测试时,Python常用的几个加密算法,你有用到吗
本文分享自华为云社区《『加密算法』| 自动化测试时基于Python常用的几个加密算法实现,你有用到吗?》,作者:虫无涯 。
写在前边
- 这几天做自动化测试,遇到一个问题,那就是接口的请求的密码是加密的;
- 产品的要求是不能使用其他特殊手段,他给提供加密算法,需要在接口请求的时候,使用加密算法处理后的数据传参;
- 其实这样来说反而简单了很多,因为已经知道加密算法,那就在传参前先把密码进行加密处理就行了(心理默默的想,这个产品也太好了吧);
- 本文主要是整理了几个加密算法,以便后续测试使用。
公用数据
- 为了方便后续举例,我们设计一个类,来把需要演示的加密算法统一封装起来:
# -*- coding:utf-8 -*- # 作者:虫无涯 # 日期:2023/12/1 # 文件名称:test_pass.py # 作用:常用的加密算法实现 # 联系:VX(NoamaNelson) # 博客:https://blog.csdn.net/NoamaNelson import hashlib class TestPass(): def __init__(self): super(TestPass, self).__init__() self.name = "admin" self.password = "123456" if __name__ == "__main__": test_pass = TestPass()
- 其中self.name模拟用户名数据,self.password模拟密码数据。
MD5直接加密
- MD5是一种常用的单向散列函数,是不可逆的,也就是说无法通过被加密后的结果来确定加密前的内容;
- 生成结果为固定的128位字节,一般为32位的十六进制字符串;
- 这里会使用到hashlib,这个一般python安装完都是有的,目录在:
X:\Python37\Lib\hashlib.py
- 直接加密实现:
def test_md5(self):
md = hashlib.md5(self.password.encode())
md5_pass = md.hexdigest()
print(f"密码{self.password}, md5直接加密后为:{md5_pass}")
- 输出为:
密码123456, md5直接加密后为:e10adc3949ba59abbe56e057f20f883e
用户名和密码组合MD5加密
- 有个真实的业务场景,在测试某个业务系统的时候,它不是简单的密码MD5加密;
- 而是使用用户名和密码组合后,先转小写再md5加密;
- 这个需求的实现过程为:
def test_md5_01(self):
data = (self.name + self.password).lower()
md = hashlib.md5(data.encode())
md5_pass = md.hexdigest()
print(f"密码{self.password},用户名{self.name}, md5组合加密后为:{md5_pass}")
- 输出为:
密码123456,用户名admin, md5组合加密后为:a66abb5684c45962d887564f08346e8d
密码使用MD5+盐加密
- 这个场景是先把密码设置盐;
- 然后将盐拼接在原密码之后;
- 实现过程为:
def test_md5_02(self):
s = self.password[:5] # 设置盐
md = hashlib.md5((self.password + s).encode())
md5_pass = md.hexdigest()
print(f"密码{self.password},md5加盐后为:{md5_pass}")
- 输出为:
密码123456,md5加盐后为:e363373ddc24b34c5bb9d99abbfd8be5
MD5加盐后将密码整体插入盐中
- 这个场景也挺常见的,就是先设置盐;
- 然后将原密码和盐使用join方式处理;
- 实现过程为:
def test_md5_03(self):
s = self.password[:6] # 设置盐
md = hashlib.md5((self.password.join(s)).encode())
md5_pass = md.hexdigest()
print(f"密码{self.password},md5加盐使用json方法为:{md5_pass}")
- 输出为:
密码123456,md5加盐使用json方法为:43ec0d3f863b4f7e635e7169ddc18606
SHA1加密
- 这个和MD5类似,不过它的结果是160位字节,一般为40位的十六进制字符串;
- 它也是在hashlib中;
- 用户名和密码拼接后使用SHA1加密,实现如下:
def test_sha1(self):
data = self.name + self.password
sha1 = hashlib.sha1()
sha1.update(data.encode("utf-8"))
sha1_pass = sha1.hexdigest()
print(f"密码{self.password},用户名{self.name}, sha1组合加密后为:{sha1_pass}")
- 输出为:
密码123456,用户名admin, sha1组合加密后为:cd5ea73cd58f827fa78eef7197b8ee606c99b2e6
SHA256加密
- SHA256比SHA1更安全,但是效率慢,结果也会长一些;
- 用户名和密码拼接后使用SHA256加密,实现如下:
def test_sha256(self):
data = self.name + self.password
sha256 = hashlib.sha256()
sha256.update(data.encode("utf-8"))
sha1_pass = sha256.hexdigest()
print(f"密码{self.password},用户名{self.name}, sha256组合加密后为:{sha1_pass}")
- 输出为:
密码123456,用户名admin, sha256组合加密后为:ac0e7d037817094e9e0b4441f9bae3209d67b02fa484917065f71b16109a1a78
- 当然还有SHA512这个就不说了,同理可证。
HMAC加密
- 其实这个我自动化过程中用的不多,但是也是很常见的一个加密算法了;
- HMAC是一种基于加密hash函数和共享密钥的消息认证协议;
- 需要用到hmac库,目录在:
X:\Python37\Lib\hmac.py
- 有三个参数,一个是密钥,一个是待加密的字符串,一个是hash函数,示例如下:
def test_hmac(self):
hm = hmac.new(b'029-11111111', bytes(self.password, 'utf-8'), hashlib.md5)
hm.digest()
hmac_pass = hm.hexdigest()
print(f"密码{self.password},用户名{self.name}, hmac加密后为:{hmac_pass}")
- 输出为:
密码123456,用户名admin, hmac加密后为:4e32d965d8965df4c7f6aaaf68791e86
其他的算法
- 当然后还有几个算法,这个不再赘述了,比如DES、AES、RSA、ECC等等
- 后续有空再补充吧。
本文源码
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/12/1
# 文件名称:test_pass.py
# 作用:常用的加密算法实现
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
import hashlib
import hmac
class TestPass():
def __init__(self):
super(TestPass, self).__init__()
self.name = "admin"
self.password = "123456"
def test_md5(self):
md = hashlib.md5(self.password.encode())
md5_pass = md.hexdigest()
print(f"密码{self.password}, md5直接加密后为:{md5_pass}")
def test_md5_01(self):
data = (self.name + self.password).lower()
md = hashlib.md5(data.encode())
md5_pass = md.hexdigest()
print(f"密码{self.password},用户名{self.name}, md5组合加密后为:{md5_pass}")
def test_md5_02(self):
s = self.password[:5] # 设置盐
md = hashlib.md5((self.password + s).encode())
md5_pass = md.hexdigest()
print(f"密码{self.password},md5加盐后为:{md5_pass}")
def test_md5_03(self):
s = self.password[:6] # 设置盐
md = hashlib.md5((self.password.join(s)).encode())
md5_pass = md.hexdigest()
print(f"密码{self.password},md5加盐使用json方法为:{md5_pass}")
def test_sha1(self):
data = self.name + self.password
sha1 = hashlib.sha1()
sha1.update(data.encode("utf-8"))
sha1_pass = sha1.hexdigest()
print(f"密码{self.password},用户名{self.name}, sha1组合加密后为:{sha1_pass}")
def test_sha256(self):
data = self.name + self.password
sha256 = hashlib.sha256()
sha256.update(data.encode("utf-8"))
sha1_pass = sha256.hexdigest()
print(f"密码{self.password},用户名{self.name}, sha256组合加密后为:{sha1_pass}")
def test_hmac(self):
hm = hmac.new(b'029-11111111', bytes(self.password, 'utf-8'), hashlib.md5)
hm.digest()
hmac_pass = hm.hexdigest()
print(f"密码{self.password},用户名{self.name}, hmac加密后为:{hmac_pass}")
if __name__ == "__main__":
test_pass = TestPass()
# test_pass.test_md5()
# test_pass.test_md5_01()
# test_pass.test_md5_02()
# test_pass.test_md5_03()
# test_pass.test_sha1()
# test_pass.test_sha256()
test_pass.test_hmac()
在自动化测试时,Python常用的几个加密算法,你有用到吗的更多相关文章
- Python常用模块-摘要算法(hashlib)
Python常用模块-摘要算法(hashlib) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MD5算法参数详解 1.十六进制md5算法摘要 #!/usr/bin/env p ...
- pytest框架执行自动化测试时使用pycharm正常运行,使用cmd或Terminal报错:Hint: make sure your test modules/packages have valid Python names.
问题描述: 使用pytest框架做接口自动化测试时,在测试用例所在的.py文件下使用pycharm的run功能可以正常跑用例,使用cmd运行窗口或Terminal则报下图中的错误: Hint: mak ...
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】
[python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...
- Python常用的标准库以及第三方库
Python常用的标准库以及第三方库有哪些? 20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们 ...
- 五大自动化测试的Python框架
1.Robot Framework 作为最重要的Python测试框架之一,Robot Framework主要被用在测试驱动(test-driven)类型的开发与验收中.虽然是由Python开发而来,但 ...
- Python 常用string函数
Python 常用string函数 字符串中字符大小写的变换 1. str.lower() //小写>>> 'SkatE'.lower()'skate' 2. str.upper ...
- Python常用模块之sys
Python常用模块之sys sys模块提供了一系列有关Python运行环境的变量和函数. 常见用法 sys.argv 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list). 变量 ...
- Python常用内建模块
Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...
- python——常用模块2
python--常用模块2 1 logging模块 1.1 函数式简单配置 import logging logging.debug("debug message") loggin ...
- python——常用模块
python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的 ...
随机推荐
- 一行命令即可启动 Walrus丨入门教程
应用管理平台 Walrus 已正式开源,本文将介绍如何上手安装 Walrus 以及如何借助 Walrus 进行应用部署. 开源地址:https://github.com/seal-io/walrus ...
- 《Kali渗透基础》08. 弱点扫描(二)
@ 目录 1:OpenVAS / GVM 1.1:介绍 1.2:安装 1.3:使用 2:Nessus 2.1:介绍 2.2:安装 2.3:使用 3:Nexpose 本系列侧重方法论,各工具只是实现目标 ...
- dotnet SemanticKernel 入门 自定义变量和技能
本文将告诉大家如何在 SemanticKernel 框架内定义自定义的变量和如何开发自定义的技能 本文属于 SemanticKernel 入门系列博客,更多博客内容请参阅我的 博客导航 自定义变量是一 ...
- springcache+redis实战
前言 有兴趣的同学,可以看我上一篇文章,然后再过来看会比较清楚点:https://www.cnblogs.com/yhc-910/p/14884678.html springcache,简单说,就是用 ...
- MIMO雷达中波形复用/分离的方法------TDMA\FDMA\DDMA\CDMA
最先接触到MIMO雷达的波形复用/分离的方法还是工作中负责的TI1843项目中了解的,主要还是时分多址波形(TDMA),当时刚接触时对这些很疑惑,再加上后面看到了频分多址波形(FDMA).码分多址波形 ...
- 当开源项目 Issue 遇到了 DevChat
目录 1. 概述 2. Bug 分析与复现 3. Bug 定位与修复 4. 代码测试 5. 文档更新 6. 提交 Commit 7. 总结 1. 概述 没错,又有人给 GoPool 项目提 issue ...
- 使用docker搭建seafile服务器
工作需要在单位和家里的不同电脑上同步指定文件夹及其内容.对比了一些解决方案,最终还是选择熟悉的seafile来做. 需要按照官方文档进行seafile的安装,选择官方推荐的docker方式快速部署. ...
- 教你用API插件开发一个AI快速处理图片小助手
本文分享自华为云社区<[案例教学]华为云API图引擎服务 GES的便捷性-AI帮助快速处理图片小助手>,作者:华为云PaaS服务小智. 调用云服务.API.SDK.调试.查看-- &quo ...
- 「codeforces - 1481F」AB Tree
link. 理一下逻辑,主要讲一下我做题时的疑惑和其它题解没提到的细节. 首先容易看到,一个必然不劣的贪心策略是把尽量靠近根的层铺成同样的字符.也许会有疑惑,字符串是否本质不同的判定每个位置地位相等. ...
- Solution -「洛谷 P7395」「CoE-I 2021C」弹珠游戏
Description Link. 游戏在 \(4\times4\) 的菱形棋盘上进行: 两名玩家轮流放置弹珠,可以在横向.纵向.\(45\) 度斜线.\(135\) 度斜线方向未放置弹珠的位置连续放 ...