• 还不会python 实现常用的数据编码和对称加密?看这篇文章就够啦~


    ♥  前  言

    相信很多使用 python 的小伙伴在工作中都遇到过,对数据进行相关编码或加密的需求,今天这篇文章主要给大家介绍对于一些常用的数据编码和数据加密的方式,如何使用 python 去实现。话不多说,接下来直接进入主题:

    1、base64 编码

    什么是 Base64 编码?
    Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法

    在 python 中对数据进行 base64 编码可以使用 base64 这个官方库

    案例:

    1. import base64
    2. data= "musen"
    3. # base编码
    4. data = data.encode()
    5. res = base64.b64encode(data)
    6. print(res)
    7. # base64解码
    8. res2 = base64.b64decode(res)
    9. print(res2)

    如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

    【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337 

    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 这个库就可以实现。

    案例

    1. from hashlib import md5
    2. def encrypt_md5(data):
    3. """md5加密"""
    4. # 创建md5对象
    5. new_md5 = md5()
    6. new_md5.update(data.encode('utf-8'))
    7. res = new_md5.hexdigest()
    8. # 加密
    9. return res

    3、DES 加密

    什么是对称加密?

    对称加密指的的加密和解密用同一个秘钥进行加解密的加密方式。

     

    什么是 EDS 加密?

    des 对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时 , 必须共同持相同的密码。

    在 python 中有一个叫做 pyDes 的第三方库可以用来实现 DES 加密,使用之前需要先通过 pip 命令安装:pip install pyDes

    案例:
    1. from pyDes import des, CBC, PAD_PKCS5
    2. import binascii
    3. def des_encrypt(s, KEY):
    4. secret_key = KEY
    5. iv = secret_key
    6. k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    7. en = k.encrypt(s, padmode=PAD_PKCS5)
    8. return binascii.b2a_hex(en).decode()
    9. def des_descrypt(s, KEY):
    10. secret_key = KEY
    11. iv = secret_key
    12. k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    13. de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
    14. return de.decode()
    15. if __name__ == '__main__':
    16. # 秘钥
    17. KEY = 'mHAxsLtt'
    18. # 加密
    19. res = des_encrypt("python666", KEY)
    20. print(res)
    21. # 解密
    22. res2 = des_descrypt(res, KEY)
    23. print(res2)

    4、3DES 加密

    什么是 3DES 加密?

    3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法

    python 中实现 3DES 加密可以使用,pyDes 这个模块去实现

    案例:
    1. import base64
    2. import hashlib
    3. import pyDes
    4. def encrypt_3des(data):
    5. key = "U8NjHq1ZP10="
    6. hash_md5 = hashlib.md5()
    7. hash_md5.update(key.encode(encoding='UTF-8'))
    8. key = hash_md5.hexdigest()
    9. iv = key[0:8]
    10. key2 = key[0:24]
    11. k = pyDes.triple_des(key2, pyDes.CBC, IV=iv, pad=None, padmode=pyDes.PAD_PKCS5)
    12. d = k.encrypt(data.encode())
    13. d = base64.b64encode(d)
    14. return d.decode()
    15. def descrypt_3des(data):
    16. key = "U8NjHq1ZP10="
    17. hash_md5 = hashlib.md5()
    18. hash_md5.update(key.encode(encoding='UTF-8'))
    19. key = hash_md5.hexdigest()
    20. iv = key[0:8]
    21. key2 = key[0:24]
    22. k = pyDes.triple_des(key2, pyDes.CBC, IV=iv, pad=None, padmode=pyDes.PAD_PKCS5)
    23. data = base64.b64decode(data)
    24. d = k.decrypt(data)
    25. return d.decode()
    26. if __name__ == '__main__':
    27. res = encrypt_3des('lemonban')
    28. print(res)
    29. res2 = descrypt_3des(res)
    30. print(res2)

     

    5、AES 加密

    什么是 AES 加密?

    AES 也是一种对称加密。它是用来替代之前的 DES 的,安全性更高。目前已经被多方分析且广为全世界所使用,并在 2002 年 5 月 26 日成为有效的标准 ,

    关于 python 中实现 Aes 加密的库很多,大家可以去 pypi 上自行下载安装,下面案例用的是 Crypto 这个库

    案例
    1. import base64
    2. from Crypto.Cipher import AES
    3. class AesEncrypt:
    4. # 密钥
    5. key = '0CoJUm6Qyw8W8jud'
    6. # 偏移量
    7. vi = '0102030405060708'
    8. def encrypt(self, data):
    9. """加密"""
    10. data = data.encode('utf8')
    11. data = (lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16).encode('utf-8'))(data)
    12. cipher = AES.new(self.key.encode('utf8'), AES.MODE_CBC, self.vi.encode('utf8'))
    13. encryptedbytes = cipher.encrypt(data)
    14. encodestrs = base64.b64encode(encryptedbytes)
    15. enctext = encodestrs.decode('utf8')
    16. return enctext
    17. def decrypt(self, data):
    18. """解密"""
    19. data = data.encode('utf8')
    20. encodebytes = base64.decodebytes(data)
    21. cipher = AES.new(self.key.encode('utf8'), AES.MODE_CBC, self.vi.encode('utf8'))
    22. text_decrypted = cipher.decrypt(encodebytes)
    23. unpad = lambda s: s[0:-s[-1]]
    24. text_decrypted = unpad(text_decrypted)
    25. text_decrypted = text_decrypted.decode('utf8')
    26. return text_decrypted
    27. if __name__ == '__main__':
    28. # 注意点:加密数据中有中文的时候,会有问题
    29. data = "musen123"
    30. aes = AesEncrypt()
    31. # 加密
    32. enctext = aes.encrypt(data)
    33. print(enctext)
    34. # # 解密
    35. text_decrypted = aes.decrypt(enctext)
    36. print(text_decrypted)

  • 相关阅读:
    NestJS学习之优秀项目分析与最佳实践
    js的arguments
    使用this.$router.push传不同的id跳如当前的页面出现跳转之后页面不刷新问题
    postgresql数据库之分割字符串函数
    Unity中Shader的UV扭曲效果的实现
    【已解决】您所使用的密钥ak有问题,不支持jsapi服务,可以访问该网址了解如何获取有效密钥。
    一文详解|Go 分布式链路追踪实现原理
    第二张微服务的调用与注册
    【Spring项目中的统一处理异常】
    WPF常用mvvm开源框架介绍 vue的mvvm设计模式鼻祖
  • 原文地址:https://blog.csdn.net/caixiangting/article/details/132791756