自动化测试时基于Python常用的几个加密算法总结

 更新时间:2023年12月12日 14:11:27   作者:虫无涯  
这几天做自动化测试,遇到一个问题,那就是接口的请求的密码是加密的,产品的要求是不能使用使用其他特殊手段,他给提供加密算法,需要在接口请求的时候,使用加密算法处理后的数据传参,本文主要是整理了几个加密算法,以便后续测试使用,需要的朋友可以参考下

0 写在前边

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

1 公用数据

  • 为了方便后续举例,我们设计一个类,来把需要演示的加密算法统一封装起来:
# -*- 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()

以上就是自动化测试时基于Python常用的几个加密算法总结的详细内容,更多关于Python加密算法的资料请关注脚本之家其它相关文章!

相关文章

  • Python渗透测试入门之Scapy库的使用详解

    Python渗透测试入门之Scapy库的使用详解

    Scapy 是一个用来解析底层网络数据包的Python模块和交互式程序,该程序对底层包处理进行了抽象打包,使得对网络数据包的处理非常简便。本文就来聊聊它的具体使用,希望对大家有所帮助
    2023-03-03
  • Python中zip()函数用法实例教程

    Python中zip()函数用法实例教程

    这篇文章主要介绍了Python中zip()函数用法实例教程,对Python初学者有一定的借鉴价值,需要的朋友可以参考下
    2014-07-07
  • numpy使用fromstring创建矩阵的实例

    numpy使用fromstring创建矩阵的实例

    今天小编就为大家分享一篇numpy使用fromstring创建矩阵的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 基于python3抓取pinpoint应用信息入库

    基于python3抓取pinpoint应用信息入库

    这篇文章主要介绍了基于python3抓取pinpoint应用信息入库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python面向对象之Web静态服务器

    Python面向对象之Web静态服务器

    这篇文章主要为大家详细介绍了Python面向对象之Web静态服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • python循环神经网络RNN函数tf.nn.dynamic_rnn使用

    python循环神经网络RNN函数tf.nn.dynamic_rnn使用

    这篇文章主要为大家介绍了python循环神经网络RNN的tf.nn.dynamic_rnn使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python常用随机数与随机字符串方法实例

    Python常用随机数与随机字符串方法实例

    这篇文章主要介绍了Python常用随机数与随机字符串方法实例,本文讲解了随机整数、随机选取0到100间的偶数、随机浮点数、随机字符串等常用随机方法,需要的朋友可以参考下
    2015-04-04
  • 在 Python 中使用 7zip 备份文件的操作

    在 Python 中使用 7zip 备份文件的操作

    这篇文章主要介绍了在 Python 中使用 7zip 备份文件的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Python实现打包成库供别的模块调用

    Python实现打包成库供别的模块调用

    这篇文章主要介绍了Python实现打包成库供别的模块调用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python 获取今天任意时刻的时间戳的方法

    Python 获取今天任意时刻的时间戳的方法

    本文主要介绍了Python 获取今天任意时刻的时间戳的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2022-06-06

最新评论