• 一文读懂,python实现常用的数据编码和对称加密


    相信很多使用 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    资源分享

    下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    谷歌api站长批量翻译工具
    Spring MVC实现RESTful
    脲酶丨Worthington杰克豆脲酶的特性及测定方案
    springboot+vue+elementUI 会员制医疗预约服务管理信息系统-#毕业设计
    Spring Cloud Sleuth在分布式中进行日志跟踪
    向量时钟的本质
    com.unity.multiplayer-hlapi版本问题
    uni-app的三种操作数据库方法
    Reactive源码分析
    代码中统一异常如何处理,才能让代码更清晰
  • 原文地址:https://blog.csdn.net/wx17343624830/article/details/127871623