是否可以使用 Python 中的密码安全地加密然后解密数据?

2024-05-03

我在 python 程序中有一些数据,我想在使用密码写入文件之前对其进行加密,然后在使用它之前读取并解密它。我正在寻找一些可以根据密码进行加密和解密的安全对称算法。

这个问题 https://stackoverflow.com/questions/16761458/how-to-decrypt-openssl-aes-encrypted-files-in-python显示了一种不安全的方式并建议使用 libsodium。由于我使用Python,我发现pysodium https://github.com/stef/pysodium。它似乎有大量从 libsodium 映射的函数,但我不知道如何简单地根据密码加密/解密数据。

我的问题是,看起来所有加密算法都使用密钥。我不想用钥匙。我想要only使用密码。就像我在终端中所做的那样:

加密:

$ cat data | openssl aes-256-cbc -salt | dd of=output.des3

解密:

$ dd if=output.des3 | openssl aes-256-cbc -d -salt

是否可以使用 pysodium 来做到这一点(以跨平台的方式,所以请不要建议使用系统调用)?


所以我的问题简化为:“如何根据 Python 中的密码加密数据”。由于缺乏文档,我放弃了 pysodium。我用了cryptography and argon2包来编写我自己的加密算法(这不是我自己的加密算法,我知道加密中的第一条规则;这只是利用已有内容的过程)。这是我的功能:

import cryptography.fernet
import argon2
import base64

def encrypt_data(data_bytes, password, salt):
    password_hash = argon2.argon2_hash(password=password, salt=salt)
    encoded_hash = base64.urlsafe_b64encode(password_hash[:32])
    encryptor = cryptography.fernet.Fernet(encoded_hash)
    return encryptor.encrypt(data_bytes)


def decrypt_data(cipher_bytes, password, salt):
    password_hash = argon2.argon2_hash(password=password, salt=salt)
    encoded_hash = base64.urlsafe_b64encode(password_hash[:32])
    decryptor = cryptography.fernet.Fernet(encoded_hash)
    return decryptor.decrypt(cipher_bytes)

这是如何使用它们的示例:

cipher = encrypt_data("Hi Dude, Don't tell anyone I said Hi!".encode(), "SecretPassword", "SaltySaltySalt")
decrypted = decrypt_data(cipher, "SecretPassword", "SaltySaltySalt")
print(cipher)
print(decrypted.decode())

请记住,加密仅针对字节;不适用于字符串。这就是我使用的原因encode/decode.

为什么是氩气?因为它是一种内存难算法,很难用 GPU 和 ASIC 来破解(是的,我是加密货币粉丝)。

为什么是费内特?因为它使用了AES CBC,看起来足够安全;此外,它真的很容易使用(这正是我所需要的......我不是密码学家,所以我需要一个黑匣子来使用)。

免责声明:请注意,我不是密码学家。我只是一个程序员。请随时批评我的加密和解密方式,并随时添加您的贡献以使其变得更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用 Python 中的密码安全地加密然后解密数据? 的相关文章

随机推荐

  • Tensorflow:提要字典错误:您必须为占位符张量提供值

    我有一个错误 我无法找出原因 这是代码 with tf Graph as default global step tf Variable 0 trainable False images tf placeholder tf float32
  • 如何对 Slim 框架应用程序进行单元测试

    我一直在尝试对修改其他人代码的示例进行单元测试 每次我到达测试运行时都没有错误的程度 当我期望它们通过时 我只是遇到相同的失败 网上没有大量文档 我真的不知道还能去哪里 任何人都可以看到我的代码哪里出错了 bootstrap php php
  • 使用 PIL 合并图像时模式不匹配

    我正在传递 jpg 文件的名称 def split image into bands filename img Image open filename data img getdata red d 0 0 0 for d in data L
  • 天气预报算法多样

    目前 英国气象局的预测引发了一场巨大的 风暴 他们预测冬季将是温和 潮湿的冬季 而北爱尔兰的气温却是有记录以来最冷的 地面上有厚厚的积雪 这在 12 月通常很少见 这是我很想尝试的东西 并不是我声称我可以击败他们 而是想知道人们目前正在使用
  • Capistrano 部署:从独角兽开始

    使用 capistrano 进行部署 一切都很顺利 然后当部署 启动 在部署 冷期间 时 它会产生错误 32m2013 03 14 15 03 05 executing deploy start 0m 33mexecuting etc in
  • 如何克服 numpy.unique 的 MemoryError

    我正在使用 Numpy 版本 1 11 1 并且必须处理一个二维数组 my arr shape 25000 25000 所有值都是整数 我需要一个唯一的数组值列表 使用时lst np unique my arr 我正进入 状态 Traceb
  • 如何在c#中打印全尺寸图像

    我正在尝试用 C 打印图像 它是由 Adob e Acrobat 从 PDF 创建的完整 8 5x11 尺寸的 tiff 当我使用下面的代码用 C 打印它时 它垂直打印正确 但水平打印不正确 水平方向被推了大约半英寸 我将图像的原点设置为
  • 在Python中计算矩阵乘以其转置(AA^T)的最快方法

    在Python中将矩阵与其转置 AA T 相乘的最快方法是什么 我认为 NumPy SciPy 没有考虑使用例如时涉及的对称性 np dot or np matmul 得到的矩阵总是对称的 所以我可以想象有一个更快的解决方案 None
  • Java HashMap 与 ArrayList 相比的内存开销

    我想知道java HashMap与ArrayList相比的内存开销是多少 Update 我想提高搜索一大包 600 万以上 相同对象的特定值的速度 因此 我正在考虑使用一个或多个HashMap来代替ArrayList 但我想知道 HashM
  • 反应本机中的“未知命名模块”错误

    我正在使用 React Native 创建一个应用程序 但某些导入会引发标题中的错误 Unknown named module 两个包都会发生这种情况 react native material design and react nativ
  • Excel Power Query:如何将巨大的表格逆透视并转置为可读格式以进行分析

    I have this table that looks similar to this 我想将其改造为如下所示 这个想法是对表进行逆透视 或转置 以便可以将其输入到其他 BI 工具中 并且可以读取以进行分析 我有大约 20 个这样的表 有
  • 从字符串构造简单的 Scala 案例类,严格不使用样板

    我寻求简洁的代码来从字符串 例如 csv 行 初始化简单的 Scala 案例类 case class Person name String age Double case class Book title String author Str
  • CURL请求问题

    我正在尝试验证 paypal pdt 信息 我生成了模型表单并提交了它 IT 部门也开始工作并返回了信息 我尝试了同样的事情来发出卷曲请求 但我的当前请求对我来说返回空白 我的模型形式
  • 如何将 logcat 输出复制到剪贴板?

    我正在 Eclipse 中开发 Android 应用程序 如何将 logcat 消息发送到剪贴板 Select the message and press ctrl c You can save it in a text file usin
  • 如何使用 Carbon 获取上个月的第一天和最后一天 - Laravel

    I need First and Last Day of 前一个月使用Carbon Library 我尝试过如下 firstDayofPreviousMonth Carbon now gt startOfMonth gt subMonth
  • 如何提交表单 onkeyup 操作

    我正在尝试保存表格onkeyup行动 我是 jQuery 新手 这可能吗 我很感激任何帮助 编辑1 保存表单意味着保存到服务器 有没有办法增加0 2秒的延迟 此代码将在 keyup 上提交您的表单 element bind keyup fu
  • 如何在Android Studio中启动Dart项目?

    在安装 Flutter 插件的过程中据说还会安装 Dart 插件 所以我把它们都安装了 但是当我打开 文件 gt 新建 菜单时 我看到 新建 Flutter 项目 新建项目 但没有看到有关 Dart 的内容 在 新建项目 对话框中 我仅看到
  • 使用 JSON 可序列化枚举自动生成棉花糖模式

    创建与我的模型相同的棉花糖模式的日子已经一去不复返了 我发现这个优秀的答案 https stackoverflow com a 42892443 4097322这解释了我如何使用简单的装饰器从 SQA 模型自动生成模式 因此我实现了它并替换
  • leaflet + gMapCatcher-更改zxy模板

    我在用着leaflet由 gMapCatcher 生成的图块 那里的文件名完全不同 例如 传单中的缩放级别 17 是 gMapCatcher 的级别 0 我需要更改 url 模板 http s somedomain com blabla z
  • 是否可以使用 Python 中的密码安全地加密然后解密数据?

    我在 python 程序中有一些数据 我想在使用密码写入文件之前对其进行加密 然后在使用它之前读取并解密它 我正在寻找一些可以根据密码进行加密和解密的安全对称算法 这个问题 https stackoverflow com questions