相信很多使用 python 的小伙伴在工作中都遇到过,对数据进行相关编码或加密的需求,今天这篇文章主要给大家介绍对于一些常用的数据编码和数据加密的方式,如何使用 python 去实现。话不多说,接下来直接进入主题:
1、base64 编码
什么是 Base64 编码?
Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法
在 python 中对数据进行 base64 编码可以使用 base64 这个官方库
案例:
import base64
data= "musen"
# base编码
data = data.encode()
res = base64.b64encode(data)
print(res)
# base64解码
res2 = base64.b64decode(res)
print(res2)
2、常见的哈希算法:
hash算法有很多:比如MD4、MD5、SHA-1 , SHA-224, SHA-256, SHA-384 和 SHA-5等等。其中MD5是比较常见的一种,也称之为MD5加密。
什么是 MD5 加密?
MD5(Message Digest Algorithm 5),是一种哈希算法,是不可逆的,即通过 md5 加密之后没办法得到原文,没有解密算法
python 中有一个叫做 hashlib 的官方库,对于一些常见的哈希算法这个库都实现了,咱们在工作中如果要使用 MD5 加密,直接使用 hashlib 这个库就可以实现。
案例
from hashlib import md5
def encrypt_md5(data):
"""md5加密"""
# 创建md5对象
new_md5 = md5()
new_md5.update(data.encode('utf-8'))
res = new_md5.hexdigest()
# 加密
return res
3、DES 加密
什么是对称加密?
对称加密指的的加密和解密用同一个秘钥进行加解密的加密方式。
什么是 EDS 加密?
des 对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时 , 必须共同持相同的密码。
在 python 中有一个叫做 pyDes 的第三方库可以用来实现 DES 加密,使用之前需要先通过 pip 命令安装:pip install pyDes
案例:
from pyDes import des, CBC, PAD_PKCS5
import binascii
def des_encrypt(s, KEY):
secret_key = KEY
iv = secret_key
k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
en = k.encrypt(s, padmode=PAD_PKCS5)
return binascii.b2a_hex(en).decode()
def des_descrypt(s, KEY):
secret_key = KEY
iv = secret_key
k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
return de.decode()
if __name__ == '__main__':
# 秘钥
KEY = 'mHAxsLtt'
# 加密
res = des_encrypt("python666", KEY)
print(res)
# 解密
res2 = des_descrypt(res, KEY)
print(res2)
4、3DES 加密
什么是 3DES 加密?
3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法
python 中实现 3DES 加密可以使用,pyDes 这个模块去实现
案例:
import base64
import hashlib
import pyDes
def encrypt_3des(data):
key = "U8NjHq1ZP10="
hash_md5 = hashlib.md5()
hash_md5.update(key.encode(encoding='UTF-8'))
key = hash_md5.hexdigest()
iv = key[0:8]
key2 = key[0:24]
k = pyDes.triple_des(key2, pyDes.CBC, IV=iv, pad=None, padmode=pyDes.PAD_PKCS5)
d = k.encrypt(data.encode())
d = base64.b64encode(d)
return d.decode()
def descrypt_3des(data):
key = "U8NjHq1ZP10="
hash_md5 = hashlib.md5()
hash_md5.update(key.encode(encoding='UTF-8'))
key = hash_md5.hexdigest()
iv = key[0:8]
key2 = key[0:24]
k = pyDes.triple_des(key2, pyDes.CBC, IV=iv, pad=None, padmode=pyDes.PAD_PKCS5)
data = base64.b64decode(data)
d = k.decrypt(data)
return d.decode()
if __name__ == '__main__':
res = encrypt_3des('lemonban')
print(res)
res2 = descrypt_3des(res)
print(res2)
5、AES 加密
什么是 AES 加密?
AES 也是一种对称加密。它是用来替代之前的 DES 的,安全性更高。目前已经被多方分析且广为全世界所使用,并在 2002 年 5 月 26 日成为有效的标准 ,
关于 python 中实现 Aes 加密的库很多,大家可以去 pypi 上自行下载安装,下面案例用的是 Crypto 这个库
案例
import base64
from Crypto.Cipher import AES
class AesEncrypt:
# 密钥
key = '0CoJUm6Qyw8W8jud'
# 偏移量
vi = '0102030405060708'
def encrypt(self, data):
"""加密"""
data = data.encode('utf8')
data = (lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16).encode('utf-8'))(data)
cipher = AES.new(self.key.encode('utf8'), AES.MODE_CBC, self.vi.encode('utf8'))
encryptedbytes = cipher.encrypt(data)
encodestrs = base64.b64encode(encryptedbytes)
enctext = encodestrs.decode('utf8')
return enctext
def decrypt(self, data):
"""解密"""
data = data.encode('utf8')
encodebytes = base64.decodebytes(data)
cipher = AES.new(self.key.encode('utf8'), AES.MODE_CBC, self.vi.encode('utf8'))
text_decrypted = cipher.decrypt(encodebytes)
unpad = lambda s: s[0:-s[-1]]
text_decrypted = unpad(text_decrypted)
text_decrypted = text_decrypted.decode('utf8')
return text_decrypted
if __name__ == '__main__':
# 注意点:加密数据中有中文的时候,会有问题
data = "musen123"
aes = AesEncrypt()
# 加密
enctext = aes.encrypt(data)
print(enctext)
# # 解密
text_decrypted = aes.decrypt(enctext)
print(text_decrypted)
技术行业要不断地学习,学习肯定不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)
送给大家一句话,共勉:当我们能力不足的时候,首先要做的是内修!当我们能力足够强大的时候,就可以外寻了!
最后也为大家准备了一份配套的学习资源,你可以微信扫描下方二维码,免费获取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…
4个月自学软件测试面进阿里!如何从功能测试转成自动化…我经历了什么
6000元报了培训班,3个月后我成功“骗”进了腾讯大厂,月薪15000