还不会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)

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)

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值