『加密算法』| 自动化测试时基于Python常用的几个加密算法实现,你有用到吗?

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 『加密算法』| 自动化测试时基于Python常用的几个加密算法实现,你有用到吗?

1 写在前边

  • 这几天做自动化测试,遇到一个问题,那就是接口的请求的密码是加密的;
  • 产品的要求是不能使用使用其他特殊手段,他给提供加密算法,需要在接口请求的时候,使用加密算法处理后的数据传参;
  • 其实这样来说反而简单了很多,因为已经知道加密算法,那就在传参前先把密码进行加密处理就行了(心理默默的想,这个产品也太好了吧);
  • 本文主要是整理了几个加密算法,以便后续测试使用。

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

7 SHA256加密

  • SHA256SHA1更安全,但是效率慢,结果也会长一些;
  • 用户名和密码拼接后使用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 其他的算法

  • 当然后还有几个算法,这个不再赘述了,比如DESAESRSAECC等等
  • 后续有空再补充吧。

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()
目录
相关文章
|
2月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
50 0
|
2月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
64 4
|
2月前
|
机器学习/深度学习 缓存 算法
Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【10月更文挑战第4天】在Python编程中,算法的设计与优化至关重要,尤其在数据处理、科学计算及机器学习领域。本文探讨了评估算法性能的核心指标——时间复杂度和空间复杂度。通过详细解释两者的概念,并提供快速排序和字符串反转的示例代码,帮助读者深入理解这些概念。同时,文章还讨论了如何在实际应用中平衡时间和空间复杂度,以实现最优性能。
72 6
|
6天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
58 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
12天前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
29天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
84 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
24天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
72 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
24天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
67 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
24天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
67 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
28天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
40 2