Python 3DES CBC 模式加密解密

3DES 加密

    def des3_cbc_encrypt(secret_key, secret_value, iv):
        """
        3DES CBC 加密算法
        :param secret_key: 加密的密钥长度24位,不足补0,超过24位,截取前24位
        :param secret_value:加密串不是8的倍数,用空格补全成8的倍数
        :param iv: 长度为8偏移量
        :return:
        """
        length = DES3.block_size
        secret_value = secret_value + (length - len(secret_value) % length) * chr(length - len(secret_value) % length)
        if len(secret_key) > 24:  # 长度大于24 截取前24位
            secret_key = secret_key[0:24]
        else:  # 不足24位进行0补全
            secret_key = secret_key + '\0' * (24 - len(secret_key) % 24)
        res = DES3.new(secret_key.encode("utf-8"), DES3.MODE_CBC, iv)
        ciphertext = res.encrypt(secret_value.encode("utf-8"))
        return base64.b64encode(ciphertext).decode("utf-8")

3DES解密

    def des3_cbc_decrypt(secret_key, secret_value, iv):
        """
        3DES CBC 解密算法
        :param secret_key: 加密的密钥长度24位,不足补0,超过24位,截取前24位
        :param secret_value:加密串不是8的倍数,用空格补全成8的倍数
        :param iv: 长度为8偏移量
        :return:
        """
        unpad = lambda s: s[0:-ord(s[-1])]
        if len(secret_key) > 24:
            secret_key = secret_key[0:24]
        else:
            secret_key = secret_key + '\0' * (24 - len(secret_key) % 24)
        res = DES3.new(secret_key.encode("utf-8"), DES3.MODE_CBC, iv)
        base64_decrypted = base64.b64decode(secret_value.encode("utf-8"))
        encrypt_text = res.decrypt(base64_decrypted)
        result = unpad(encrypt_text.decode())return result

 注意:

  iv 需要转换成字节

上一篇:容器编排系统K8s之ConfigMap、Secret资源


下一篇:Linux源码(0.11)学习03---复制内存页表 copy_mem copy_page_tables