用python做HTTP接口自动化测试的时候,接口的很多参数是经过各种编码加密处理后在传到后台的,这里列举出python实现 应用 base64、hmac、hashlib包实现:md5编码 sha1编码  sha3_224编码  sha3_256编码  sha3_384编码  sha3_512编码 、 sha224编码 、 sha384编码 、 sha512编码  、shake_128编码 、 shake_256 编码 、urlsafe_b64encode编码等各种编码加密签名的方法


import base64
import hmac
import hashlib # MD5 编码 应用haslib
user = 'username'
pwd = 'pass123456' user = user.encode(encoding='utf-8')
pwd = pwd.encode(encoding='utf-8')
user_MD5 = hashlib.md5(user).hexdigest()
pwd_MD5 = hashlib.md5(pwd).hexdigest() print('user_MD5:', user_MD5)
print('pwd_MD5:', pwd_MD5) # MD5 编码含有中文
# 如果有中文中文字符在Python中是以unicode存在的,同一个字符串在不同的编码体系下有不同的值,所以在hash前要进行编码需要转为gb2312
# 这样才可能跟其他工具的编码一样(当然具体转为那种编码,前后端需要统一即可) user = '张三as'
pwd = 'a小四a' user = user.encode(encoding='gb2312')
pwd = pwd.encode(encoding='utf-8')
user_MD5 = hashlib.md5(user).hexdigest()
pwd_MD5 = hashlib.md5(pwd).hexdigest() print('张三as:', user_MD5)
print('a小四a:', pwd_MD5) # hashlib的编码:md5 sha1 sha3_224 sha3_256 sha3_384 sha3_512 sha224 sha384 sha512 shake_128 shake_256
a = "hello word"
a = a.encode(encoding='utf-8')
print('hello word:md5 = ', hashlib.md5(a).hexdigest())
print('hello word:sha1 = ', hashlib.sha1(a).hexdigest())
print('hello word:sha224 = ', hashlib.sha224(a).hexdigest())
print('hello word:sha256 = ', hashlib.sha256(a).hexdigest())
print('hello word:sha384 = ', hashlib.sha384(a).hexdigest())
print('hello word:sha512 = ', hashlib.sha512(a).hexdigest()) # base64 编码
string = 'helloWord'
byteString = string.encode(encoding='utf-8')
base64String = base64.b64encode(byteString)
print("base64String :", base64String) # 这个时候base64String 是byte型的,需要转化为str
base64String = base64String.decode()
print("base64String.decode :", base64String) # 现在 才是str型的 # base64 解码 decodestr = base64.b64decode(base64String)
print('decodestr:', decodestr)
print("decodestr.decode:", decodestr.decode()) # SHA256编码
string = ''
byteString = string.encode(encoding='utf-8')
print(byteString) sha256str = hashlib.sha256(byteString).hexdigest()
# 把小写转换为大写
sha256str = sha256str.upper()
print("sha256str:", sha256str) # urlsafe_b64encode编码
p= 'PUT'
m= '\n'
q= "/api/v1/t11104_1502526876337/status"
s= "api_sign_key"
qs= "timestamp=1502526886275"
pay= "{\"device\":{\"app_version_number\":12,\"dtype\":1,\"did\":\"2c6e2d7594e49a4a\",\"net_type\":\"WIFI\",\"system_version_name\":\"4.1.1\",\"app_version_name\":\"1.0.2\",\"channel\":\"200\",\"lang\":\"zh\",\"phone_model\":\"Samsung Galaxy S2 - 4.1.1 - API 16 - 480x800\",\"country\":\"US\"}},\"previous_status\":\"CREATED\",\"status_to_change\":\"LIVING\""; secret_key = s.encode(encoding='utf-8')
message = (p+m+q+m+qs+m+pay).encode(encoding='utf-8')
print('p+m+q+m+qs+m+pay:', p+m+q+m+qs+m+pay)
print('byte_secret_key:', secret_key)
print('byte_message:', message) # 这里举例 sha256编码 除此之外,hmac 也有其他的各种编码:
# md5 sha1 sha3_224 sha3_256 sha3_384 sha3_512 sha224 sha384 sha512 shake_128 shake_256
digest = hmac.new(secret_key, message, digestmod=hashlib.sha256).digest()
print('digest:', digest) sig = base64.urlsafe_b64encode(digest).decode()
print('sig', sig)
sig = sig.rstrip('=')
print('sig去除末尾=号', sig) p = 'GET'
m= '\n'
q= "/api/v1/discovery"
s= "api_sign_key"
qs= "device=eyJhcHBfdmVyc2lvbl9udW1iZXIiOi0xMDAwLCJkdHlwZSI6MSwiZGlkIjoiMmM2ZTJkNzU5NGU0OWE0YSIsIm5ldF90eXBlIjoiV0lGSSIsInN5c3RlbV92ZXJzaW9uX25hbWUiOiI0LjEuMSIsImFwcF92ZXJzaW9uX25hbWUiOiIxLjAuMiIsImNoYW5uZWwiOiIyMDAiLCJsYW5nIjoiemgiLCJwaG9uZV9tb2RlbCI6IlNhbXN1bmcgR2FsYXh5IFMyIC0gNC4xLjEgLSBBUEkgMTYgLSA0ODB4ODAwIiwiY291bnRyeSI6IlVTIn0=&size=50&last_seen_pos=&timestamp=1508382408763";
pay= "" secret_key = s.encode(encoding='utf-8')
message = (p+m+q+m+qs+m+pay).encode(encoding='utf-8')
print('p+m+q+m+qs+m+pay:', p+m+q+m+qs+m+pay)
print('byte_secret_key:', secret_key)
print('byte_message:', message) digest = hmac.new(secret_key, message, digestmod=hashlib.sha256).digest()
print('digest:', digest) sig = base64.urlsafe_b64encode(digest).decode()
print('sig', sig) sig = sig.rstrip('=')
print('sig去除末尾=号', sig)
编码结果:

user_MD5: 14c4b06b824ec593239362517f538b29
pwd_MD5: 9be40402f45736bcb9502225fad5ec9b
张三as: fd137303d7f65f2bc84d0dd7bd90fbd6
a小四a: 4c76a06c7c2c0cd2bc61ca1f6e5e81a2
hello word:md5 = 13574ef0d58b50fab38ec841efe39df4
hello word:sha1 = e0738b87e67bbfc9c5b77556665064446430e81c
hello word:sha224 = 52d3bd5b2f649ba2689a7d31973a99a8f9e46fc2a65a10dc32bbefd3
hello word:sha256 = f0da559ea59ced68b4d657496bee9753c0447d70702af1a351c7577226d97723
hello word:sha384 = a58d27ee06211edc7a64f199b7da55fd0fe31d98b2c949f83fbb95bc7fc3114d7957ca5a3ec4b489a026356135681782
hello word:sha512 = 86dfecbd488d84481bdfc5d54f52734fd40298ef68da014095a52889a35a596a3e64a9ea64f005caaa4b4d2b11d9a69f12214a31b79bbddc0872fa7561200bd2
base64String : b'aGVsbG9Xb3Jk'
base64String.decode : aGVsbG9Xb3Jk
decodestr: b'helloWord'
decodestr.decode: helloWord
b''
sha256str: 8D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92
p+m+q+m+qs+m+pay: PUT
/api/v1/t11104_1502526876337/status
timestamp=1502526886275
{"device":{"app_version_number":12,"dtype":1,"did":"2c6e2d7594e49a4a","net_type":"WIFI","system_version_name":"4.1.1","app_version_name":"1.0.2","channel":"","lang":"zh","phone_model":"Samsung Galaxy S2 - 4.1.1 - API 16 - 480x800","country":"US"}},"previous_status":"CREATED","status_to_change":"LIVING"
byte_secret_key: b'api_sign_key'
byte_message: b'PUT\n/api/v1/t11104_1502526876337/status\ntimestamp=1502526886275\n{"device":{"app_version_number":12,"dtype":1,"did":"2c6e2d7594e49a4a","net_type":"WIFI","system_version_name":"4.1.1","app_version_name":"1.0.2","channel":"200","lang":"zh","phone_model":"Samsung Galaxy S2 - 4.1.1 - API 16 - 480x800","country":"US"}},"previous_status":"CREATED","status_to_change":"LIVING"'
digest: b'j\xac\x15\x82\x00\xe9\x07K\xe5\x86\xdf\x1e\x05=+\x82a\x11b\xe6\x11\xde\xf4\x19\xfe\xa3\x08\x9d\x8eK[\xba'
sig aqwVggDpB0vlht8eBT0rgmERYuYR3vQZ_qMInY5LW7o=
sig去除末尾=号 aqwVggDpB0vlht8eBT0rgmERYuYR3vQZ_qMInY5LW7o
p+m+q+m+qs+m+pay: GET
/api/v1/discovery
device=eyJhcHBfdmVyc2lvbl9udW1iZXIiOi0xMDAwLCJkdHlwZSI6MSwiZGlkIjoiMmM2ZTJkNzU5NGU0OWE0YSIsIm5ldF90eXBlIjoiV0lGSSIsInN5c3RlbV92ZXJzaW9uX25hbWUiOiI0LjEuMSIsImFwcF92ZXJzaW9uX25hbWUiOiIxLjAuMiIsImNoYW5uZWwiOiIyMDAiLCJsYW5nIjoiemgiLCJwaG9uZV9tb2RlbCI6IlNhbXN1bmcgR2FsYXh5IFMyIC0gNC4xLjEgLSBBUEkgMTYgLSA0ODB4ODAwIiwiY291bnRyeSI6IlVTIn0=&size=50&last_seen_pos=&timestamp=1508382408763 byte_secret_key: b'api_sign_key'
byte_message: b'GET\n/api/v1/discovery\ndevice=eyJhcHBfdmVyc2lvbl9udW1iZXIiOi0xMDAwLCJkdHlwZSI6MSwiZGlkIjoiMmM2ZTJkNzU5NGU0OWE0YSIsIm5ldF90eXBlIjoiV0lGSSIsInN5c3RlbV92ZXJzaW9uX25hbWUiOiI0LjEuMSIsImFwcF92ZXJzaW9uX25hbWUiOiIxLjAuMiIsImNoYW5uZWwiOiIyMDAiLCJsYW5nIjoiemgiLCJwaG9uZV9tb2RlbCI6IlNhbXN1bmcgR2FsYXh5IFMyIC0gNC4xLjEgLSBBUEkgMTYgLSA0ODB4ODAwIiwiY291bnRyeSI6IlVTIn0=&size=50&last_seen_pos=&timestamp=1508382408763\n'
digest: b'Sh\xcf{\xf6z\x84{\x07"\x91.\x1a\x1c\x8a\xc4|\xcfp\x1aW\x00v\x15\x11\xb3\xd1\xb0[\xd3\x1ee'
sig U2jPe_Z6hHsHIpEuGhyKxHzPcBpXAHYVEbPRsFvTHmU=
sig去除末尾=号 U2jPe_Z6hHsHIpEuGhyKxHzPcBpXAHYVEbPRsFvTHmU Process finished with exit code 0

python 应用 base64、hmac、hashlib包实现:MD5编码 base64编码解码、SHA256编码、urlsafe_b64encode编码等等基本所有的加密签名的方法的更多相关文章

  1. python的md5和base64加密

    在用jmeter测试接口时,有的请求参数会加密,例如,回流接口:http://ip:port/oms-gateway-datareflow-mq/orderReflow/tmsPracticeActi ...

  2. python全栈开发-hashlib模块(数据加密)、suprocess模块、xml模块

    一.hashlib模块 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 ...

  3. Python之数据加密与解密及相关操作(hashlib模块、hmac模块、random模块、base64模块、pycrypto模块)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

  4. python里面的MD5加密 ---# hashlib包的使用

    在应用程序的接口里,常用到签名:其中签名里用到MD5加密,这里用hashlib实现 hashlib 概念:Hash,译做"散列",也有直接音译为"哈希"的.把任 ...

  5. Python模块——HashLib(摘要算法)与base64

    摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...

  6. Python的 json 、 hashlib 、 Base64 模块

    json模块 简介 全称"JavaScript Object Notation" (JavaScript对象表示法)它是一种基于文本,独立于语言的轻量级数据交换格式 以易于让人阅读 ...

  7. 【java】之 apache commons-codec 与Apache Digest demo实例,支持md5 sha1 base64 hmac urlencode

    使用commons-codec 进行加密的一些操作 package com.jiepu.ApacheDigest; import java.io.FileInputStream; import org ...

  8. Python中模块之hashlib&hmac的讲解

    hashlib & hmac的讲解 两个模块主要用于加密相关的操作. 1. hashlib模块 md5 具体代码如下 import hashlib ha_m5 = hashlib.md5()# ...

  9. python接口自动化测试二十七:加密与解密MD5、base64

    # MD5加密 # 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作 import hashlib def MD5(str): # 创建md5对象 hl ...

随机推荐

  1. SVN 客户端的安装与配置

    127.0.0.1这个IP地址代表连接本机,其实https://127.0.0.1:443/svn/Test/和https://ZhongZhenhua-PC/svn/Test/是一样的,因为我这里S ...

  2. Python property() 函数

    Python property() 函数  Python 内置函数 描述 property() 函数的作用是在新式类中返回属性值. 语法 以下是 property() 方法的语法: class pro ...

  3. 配置python学习环境遇到的问题:[Decode error - output not utf-8]

    因为前阵子学习monkeyrunner的时候,碰到了很多关于.py的脚本,其实我是一知半解的,也没打算去学习一下.将就着看看吧,后来无意中看到自动化测试工程师都要求会脚本语言的时候,刺激了我,想了想, ...

  4. [leetcode]215. Kth Largest Element in an Array 数组中第k大的元素

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  5. PAT 1053 住房空置率 (20)(代码+思路)

    1053 住房空置率 (20)(20 分) 在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给定的阈值 ...

  6. OpenGLES.APPLE_texture_format_BGRA8888

    OpenGL ES的扩展: APPLE_texture_format_BGRA8888 http://www.khronos.org/registry/gles/extensions/APPLE/AP ...

  7. Ubuntu部分命令的使用简介

    1.查看USB设备 lsusb #查看系统中的usb设备 lsusb –v  #查看详细的usb设备信息 2.ubuntu mount u盘 第一步:查看U盘信息 sudo fdisk -l 得到类似 ...

  8. Laravel 5 如何对部份 URI 禁用 CSRF 验证

    打开中间件 VerifyCsrfToken.php 在其 $except 属性中添加要禁用的 uri,如: api/user/add api/user/* api/*

  9. asp.net (jquery easy-ui datagrid)通用Excel文件导出(NPOI)

    http://www.cnblogs.com/datacool/archive/2013/03/12/easy-ui_datagrid_export_excel_asp_net.html

  10. centos7 jenkins安装和使用

    jenkins 安装和使用 1.先安装jdK1.8 和 maven 此步骤省略 2.进入jenkisn 官网 下载https://jenkins.io/download/ Long-term Supp ...