一、缘 起
今日做接口测试,用Python实现接口签名认证的过程中用到了一些常用算法,在此做以总结,以便往后回顾
二、说 明
- 环境:Win 7 + Python 3.6
-
内容:
1. Python 3下MD5加密的常用方法
2. Python 3下AES加密的常用方法
3. Python 3下匿名函数lamda的简单使用
三、实 例
- Python 3下MD5加密的常用方法
# 由于MD5模块在python3中被移除,使用hashlib模块进行md5操作
import hashlib
# md5加密实现
def md5(string):
m = hashlib.md5()
# 注意update()输入应为bytes类型,需用.encode('utf-8')将str转为bytes型
m.update(string.encode('utf-8'))
return m.hexdigest()
print(md5('ssfan'))
>> ac9a056a8e0954fcbf0370f2ca883b53
- Python 3下AES加密的常用方法
- Python 3 下安装AES库
# 第一步,安装crypto
pip install crypto
# 第二步,安装pycryptodome
pip show pycryptodome
# 第三步,改文件夹名称
进入Python3的目录下的\lib\site-packages,将crypto文件夹更名为Crypto(注意是大写的C,否则导入模块失败)
- Python 3下AES加密的常用方法
import base64
from Crypto.Cipher import AES
# AES加密
def aes_crypt(key, iv, passwd):
"""
AES加密算法(key,iv,passwd输入均应为bytes类型,选择MODE_CBC类型加密)
:param key: 秘钥(定值,16位长度)
:param iv: 偏移(定值,位长度)
:param passwd: 密码
:return: 返回值再经过base64加密后
"""
BS = AES.block_size # 获取AES数据位数(16位)
# 补位,补够16位
pad = (lambda s: s + (BS - len(s) % BS) * '#')
print(pad(passwd))
aes = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))
return base64.b64encode(aes.encrypt(pad(passwd).encode('utf-8')))
aes_key = 'QWHeJfoWQgaYasdf'
aes_iv = '1111111111222345'
password = '123456'
# 注意,经过aes_crypt加密的密文是bytes类型
password = aes_crypt(aes_key, aes_iv, password).decode('utf-8')
print(password)
>> 123456##########
>> p8Vsc9TZDlFRoQctgiWJOA==
- Python 3下匿名函数lamda的简单使用
# 匿名函数
pad = (lambda s: s + (16 - len(s) % 16) * '#')
# 正常函数
def pad_nomal(s):
return s + (16 - len(s) % 16) * '#'
print(pad('ssfan'), pad_nomal('ssfan'))
>> ssfan########### ssfan###########
~
~
~
不积跬步,无以至千里
网友评论