1 前言
- 这几天做自动化测试,遇到一个问题,那就是接口的请求的密码是加密的;
- 产品的要求是不能使用使用其他特殊手段,他给提供加密算法,需要在接口请求的时候,使用加密算法处理后的数据传参;
- 其实这样来说反而简单了很多,因为已经知道加密算法,那就在传参前先把密码进行加密处理就行了(心理默默的想,这个产品也太好了吧);
- 本文主要是整理了几个加密算法,以便后续测试使用。
对Python感兴趣的话,文末领取全套最新Python学习资源,祝你一臂之力!
2 公用数据
- 为了方便后续举例,我们设计一个类,来把需要演示的加密算法统一封装起来:
# -*- 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
模拟密码数据。
2 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
3 用户名和密码组合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
4 密码使用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
5 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
6 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
文末领取全套最新Python学习资源
7 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
这个就不说了,同理可证。
8 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
9 其他的算法
- 当然后还有几个算法,这个不再赘述了,比如
DES
、AES
、RSA
、ECC
等等 - 后续有空再补充吧。
10 本文源码
# -*- 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 不论是用于就业还是做副业赚钱都不错,而且学好Python还能契合未来发展趋势——人工智能、机器学习、深度学习等。
小编是一名Python开发工程师,自己整理了一套最新的Python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,这份【最新全套Python学习资料】 一定对你有用!
小编为对Python感兴趣的小伙伴准备了以下籽料 !
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑培训的!
- 学习时间相对较短,学习内容更全面更集中
- 可以找到适合自己的学习方案
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等学习教程。带你从零基础系统性的学好Python!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最新全套【Python入门到进阶资料 & 实战源码 &安装工具】(安全链接,放心点击)
我已经上传至CSDN官方,如果需要可以扫描下方官方二维码免费获取【保证100%免费】
*今天的分享就到这里,喜欢且对你有所帮助的话,记得点赞关注哦~下回见 !