首页 > 其他分享 >cryptography与zlib系列:数据压缩与加密

cryptography与zlib系列:数据压缩与加密

时间:2024-11-25 20:05:45浏览次数:7  
标签:cryptography encrypted zlib cipher key import suite data 数据压缩

cryptography与zlib系列:数据压缩与加密

这里采用对称加密方法进行加密,首先创建一个Fernet加密器,这里的key,通过密钥派生函数与设定的密码进行创建,具有更强的保密功能。

创建Fernet加密器函数

import os
from base64 import urlsafe_b64encode
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC


def get_cipher_suite(
    password: str,
    length,
    iterations: int = 480000,
) -> bytes:
    salt = os.urandom(16)  # 生成一个16字节的随机盐值
    # 创建密钥派生函数(KDF)
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),  # 使用SHA-256哈希算法
        length=32,  # 派生密钥的长度为32字节
        salt=salt,  # 使用盐值
        iterations=480000  # 迭代次数为480000
    )
    # 记录key的值,以便后续解密时使用
    key = urlsafe_b64encode(kdf.derive(password))  
    print(f"==>> key: {key}")
    cipher_suite = Fernet(key)

    return cipher_suite

获取压缩与加密后的数据

import zlib

def get_compress_encrypt_data(
    file_path: str,
    cipher_suite,
    compress_level: int = 9,
) -> bytes:
    with open(file_path, "rb") as f:
        data = f.read()
        compressed_data = zlib.compress(data, compress_level)
        encrypted_data = cipher_suite.encrypt(compressed_data)
        return encrypted_data

完整示例

import os
import zlib
from base64 import urlsafe_b64encode
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC


def get_cipher_suite(
    password: str,
    length: int,
    iterations: int = 480000,
) -> bytes:
    salt = os.urandom(16)  # 生成一个16字节的随机盐值
    # 创建密钥派生函数(KDF)
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),  # 使用SHA-256哈希算法
        length=32,  # 派生密钥的长度为32字节
        salt=salt,  # 使用盐值
        iterations=480000  # 迭代次数为480000
    )
    # 记录key的值,以便后续解密时使用
    key = urlsafe_b64encode(kdf.derive(password))  
    print(f"==>> key: {key}")
    cipher_suite = Fernet(key)

    return cipher_suite


def get_compress_encrypt_data(
    file_path: str,
    cipher_suite,
    compress_level: int = 9,
) -> bytes:
    with open(file_path, "rb") as f:
        data = f.read()
        compressed_data = zlib.compress(data, compress_level)
        encrypted_data = cipher_suite.encrypt(compressed_data)
        return encrypted_data


if __name__ == "__main__":
    from time import time

    start_time = time()
    password = "password"
    file_path = "test.txt"
    cipher_suite = get_cipher_suite(password, 32)
    encrypted_data = get_compress_encrypt_data(file_path, cipher_suite)
    end_time = time()
    print(f"Time taken: {end_time - start_time} seconds")
    file_encrypted_path = "test_encrypted.txt"
    with open(file_encrypted_path, "wb") as f:
        f.write(encrypted_data)
    

标签:cryptography,encrypted,zlib,cipher,key,import,suite,data,数据压缩
From: https://blog.csdn.net/familytaijun/article/details/144037045

相关文章

  • Zlibrary最新镜像网址,全球最大数字图书馆已恢复
    zlibrary网站距离上次被美国执法机构端掉,已经过去了好几个月。近期Zlibrary的镜像站点终于恢复正常!无需任何工具,可直接访问。目前图书藏量已经达到了11948431本,我试着搜一些冷门小说也是可以搜到,真正的镜像网站!!zlibrary电脑客户端/安卓appzlibrary(windows/mac/安卓)客户端:ht......
  • Facebook开源的一款快速无损压缩算法!比zlib、gzip还快!
    在如今数据爆炸的时代,如何高效存储和传输数据成为了很多企业和开发者关注的焦点。无论是互联网行业,还是软件开发,数据压缩技术都发挥着不可或缺的作用,最直接的应用就是高效存储和传输。而在众多压缩算法中,Zstd(Zstandard)凭借其卓越的压缩率和惊人的解压速度脱颖而出,成为了很......
  • zlibrary镜像网站,zlibrary中文入口(持续更新)
    zlibrary,一个全球领先的数字图书馆,拥有超过1300万册电子书资源,供人下载。它跨越多个学科,从古典文学到现代科技,再到人文艺术,无所不包。ZLibrary的使命是促进教育平等,让每个人都能便捷地获取知识。zlibrary电脑客户端/安卓appzlibrary(windows/mac/安卓)客户端:https://pan.quark......
  • zlibrary数字图书馆官网镜像网址及客户端入口(长期更新)
    zlibrary数字图书馆介绍Z-library,被誉为全球范围内最为庞大的数字图书馆之一,其藏书量之丰富令人叹为观止,总计囊括了超过9,826,996册电子书及84,837,646篇学术期刊文章。这座庞大的知识宝库覆盖了从经典文学巨著到前沿理工学科,从人文艺术瑰宝到专业学术论文的广泛领域,几乎能够......
  • zlibrary镜像网址入口以及客户端app集合(2024持续更新)
    zlibrary数字图书馆介绍Z-library,被誉为全球范围内最为庞大的数字图书馆之一,其藏书量之丰富令人叹为观止,总计囊括了超过9,826,996册电子书及84,837,646篇学术期刊文章。这座庞大的知识宝库覆盖了从经典文学巨著到前沿理工学科,从人文艺术瑰宝到专业学术论文的广泛领域,几乎能够......
  • zlibrary 最新官方国内可用网址入口及电脑客户端集合(2024持续更新)
    Z-library,被誉为全球范围内最为庞大的数字图书馆之一,其藏书量之丰富令人叹为观止,总计囊括了超过9,826,996册电子书及84,837,646篇学术期刊文章。这座庞大的知识宝库覆盖了从经典文学巨著到前沿理工学科,从人文艺术瑰宝到专业学术论文的广泛领域,几乎能够满足每一位求知者的阅读与学......
  • 《尘路之旅》游戏启动时闪退弹窗“找不到zlib.dll”该怎么解决?尘路之旅游戏崩溃提示“
    启动《尘路之旅》游戏时,遭遇闪退并弹窗显示“找不到zlib.dll”,这给玩家带来不小的困扰。现在让我们一起着手解决这个问题。下面将为您详细阐述解决此难题的一系列可能有效的方法,助您顺利开启游戏征程。本篇将为大家带来《尘路之旅》游戏启动时闪退弹窗“找不到zlib.dll”该怎么......
  • Docker拉取镜像报错:failed to register layer: exit status 22: unpigz: abort: zlib
    今天在甲方的服务器上升级Docker容器时拉取镜像报错failedtoregisterlayer:exitstatus22:unpigz:abort:zlibversionlessthan1.2.3,很纳闷明明在阿里云上测试的时候没有这个问题来着,遂开始查资料发现是pigz的bug,将其升级即可重写拉取镜像运行操作步骤:安装新版本c......
  • AnolisOS-7.9编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.0+zlib1.3.1
     实验镜像AnolisOS-7.9-QU1-x86_64-dvd.iso安装过程内核选择3.x #安装必备和常用软件包#安装相关的依赖项,如有遗漏再次安装yuminstall-y perl-IPC-Cmdvimmakegccwgettarlrzsznet-tools #安装zlib./configure--prefix=/usr/local/zlibmake&&makei......
  • ubuntu-22.04.4编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.2+zlib1.3.1
     实验镜像ubuntu-22.04.4-live-server-amd64.iso#安装必备和常用软件包#安装相关的依赖项,如有遗漏再次安装aptinstall-y libz-devvimgccwgettarlrzsznanomakenet-tools #安装zlib./configure--prefix=/usr/local/zlibmake&&makeinstall #安装......