本文分享自华为云社区《『加密算法』| 自动化测试时基于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常用的几个加密算法,你有用到吗的更多相关文章

  1. Python常用模块-摘要算法(hashlib)

    Python常用模块-摘要算法(hashlib) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MD5算法参数详解 1.十六进制md5算法摘要 #!/usr/bin/env p ...

  2. pytest框架执行自动化测试时使用pycharm正常运行,使用cmd或Terminal报错:Hint: make sure your test modules/packages have valid Python names.

    问题描述: 使用pytest框架做接口自动化测试时,在测试用例所在的.py文件下使用pycharm的run功能可以正常跑用例,使用cmd运行窗口或Terminal则报下图中的错误: Hint: mak ...

  3. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  4. Python常用的标准库以及第三方库

    Python常用的标准库以及第三方库有哪些?   20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们 ...

  5. 五大自动化测试的Python框架

    1.Robot Framework 作为最重要的Python测试框架之一,Robot Framework主要被用在测试驱动(test-driven)类型的开发与验收中.虽然是由Python开发而来,但 ...

  6. Python 常用string函数

    Python 常用string函数 字符串中字符大小写的变换 1. str.lower()   //小写>>> 'SkatE'.lower()'skate' 2. str.upper ...

  7. Python常用模块之sys

    Python常用模块之sys sys模块提供了一系列有关Python运行环境的变量和函数. 常见用法 sys.argv 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list). 变量 ...

  8. Python常用内建模块

    Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...

  9. python——常用模块2

    python--常用模块2 1 logging模块 1.1 函数式简单配置 import logging logging.debug("debug message") loggin ...

  10. python——常用模块

    python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的 ...

随机推荐

  1. 一行命令即可启动 Walrus丨入门教程

    应用管理平台 Walrus 已正式开源,本文将介绍如何上手安装 Walrus 以及如何借助 Walrus 进行应用部署. 开源地址:https://github.com/seal-io/walrus ...

  2. 《Kali渗透基础》08. 弱点扫描(二)

    @ 目录 1:OpenVAS / GVM 1.1:介绍 1.2:安装 1.3:使用 2:Nessus 2.1:介绍 2.2:安装 2.3:使用 3:Nexpose 本系列侧重方法论,各工具只是实现目标 ...

  3. dotnet SemanticKernel 入门 自定义变量和技能

    本文将告诉大家如何在 SemanticKernel 框架内定义自定义的变量和如何开发自定义的技能 本文属于 SemanticKernel 入门系列博客,更多博客内容请参阅我的 博客导航 自定义变量是一 ...

  4. springcache+redis实战

    前言 有兴趣的同学,可以看我上一篇文章,然后再过来看会比较清楚点:https://www.cnblogs.com/yhc-910/p/14884678.html springcache,简单说,就是用 ...

  5. MIMO雷达中波形复用/分离的方法------TDMA\FDMA\DDMA\CDMA

    最先接触到MIMO雷达的波形复用/分离的方法还是工作中负责的TI1843项目中了解的,主要还是时分多址波形(TDMA),当时刚接触时对这些很疑惑,再加上后面看到了频分多址波形(FDMA).码分多址波形 ...

  6. 当开源项目 Issue 遇到了 DevChat

    目录 1. 概述 2. Bug 分析与复现 3. Bug 定位与修复 4. 代码测试 5. 文档更新 6. 提交 Commit 7. 总结 1. 概述 没错,又有人给 GoPool 项目提 issue ...

  7. 使用docker搭建seafile服务器

    工作需要在单位和家里的不同电脑上同步指定文件夹及其内容.对比了一些解决方案,最终还是选择熟悉的seafile来做. 需要按照官方文档进行seafile的安装,选择官方推荐的docker方式快速部署. ...

  8. 教你用API插件开发一个AI快速处理图片小助手

    本文分享自华为云社区<[案例教学]华为云API图引擎服务 GES的便捷性-AI帮助快速处理图片小助手>,作者:华为云PaaS服务小智. 调用云服务.API.SDK.调试.查看-- &quo ...

  9. 「codeforces - 1481F」AB Tree

    link. 理一下逻辑,主要讲一下我做题时的疑惑和其它题解没提到的细节. 首先容易看到,一个必然不劣的贪心策略是把尽量靠近根的层铺成同样的字符.也许会有疑惑,字符串是否本质不同的判定每个位置地位相等. ...

  10. Solution -「洛谷 P7395」「CoE-I 2021C」弹珠游戏

    Description Link. 游戏在 \(4\times4\) 的菱形棋盘上进行: 两名玩家轮流放置弹珠,可以在横向.纵向.\(45\) 度斜线.\(135\) 度斜线方向未放置弹珠的位置连续放 ...