【问题标题】:Python: Encrypting file contents using a password and decrypting it by usersPython:使用密码加密文件内容并由用户解密
【发布时间】:2018-01-18 07:21:48
【问题描述】:

我已经阅读了很多关于这个主题的内容,但我真的不明白我应该如何实现它。我想加密用户 A 的(文本)文件。用户已为他/她的帐户设置了密码,并且正在使用此密码对文本文件进行加密。现在用户与另一个用户 B 共享他的加密文件。这个用户当然为他/她的帐户设置了另一个密码。然而,他/她和只是他/她,应该能够在不知道用户 A 的密码的情况下解密文本。

我想我必须使用 私钥/公钥算法。我已经看过PyCrypto,但我真的不明白如何从用户 A 的密码创建公钥/私钥。

我更喜欢真正的 Python 解决方案,它不包含 pgp 可执行文件dll

一些伪代码:

key, encrypted = generate_public_key_and_encrypt(userA.password, "Hello World!")
userA.share_data(userB, key)
decrypted = decrypt(userB.password, key, encrypted)

【问题讨论】:

  • 您的问题到底是什么?对于这些问题,我们通常会收到minimal reproducible example具体问题
  • 如何使用用户密码加密字符串?第一个用户分享后,其他用户如何解密?
  • 通常你派生一个随机对称密钥,用其他用户的公钥加密它,用对称密钥加密文件,然后将两者传输给其他用户。但是,您的问题对于 StackOverflow 来说有点过于宽泛,因此它可能会被关闭。
  • 这个算法中包含的密码在哪里?
  • 不是。您应该在创建用户时为每个用户生成一个私钥。

标签: python security encryption cryptography pycrypto


【解决方案1】:

首先,密码认证(password based)和加密(key based)是完全不同的。基本上,如果你想实现加密/解密,你必须能够有一种机制来在用户之间交换密钥。如果您打算为此目的使用公钥/私钥,私钥始终用于解密而不是加密。如果要将密码映射到私钥,则应使用自己的密码来解密消息而不是加密。

如果你还想为这种机制使用密码,你可以将你的私钥映射到密码,然后每次都间接使用这个密码来解密消息。而且,所有其他用户都应该知道映射到该用户的公钥。

如果您计划使用您提到的PyCrypto,您可能需要执行以下加密/解密操作。

>>> from Crypto.PublicKey import RSA
>>> key = RSA.generate(2048)
>>> public = key.publickey()

假设您要加密消息 1234

# Encrypting using public key of user which is broadcasted   
>>> cipher = public.encrypt(1234, 22)

# Decrypting using users own secret private key
>>> message = key.decrypt(cipher)

根据您的要求,在某处维护您的密码和私钥的映射。每当用户想要解密消息时,您可以向他询问密码并使用导出的密钥来解密消息。

# exporting private key
>>> private_key = key.exportKey()

# exporting public key
public = key.publickey()
public_key = public.exportKey()

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 2011-04-09
    • 1970-01-01
    • 2021-09-22
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    相关资源
    最近更新 更多