Python:使用密码加密文件内容,由用户解密

Python: Encrypting file contents using a password and decrypting it by users

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

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

我更喜欢真正的 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)

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

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

如果您打算像您提到的那样使用 PyCrypto,您可能需要为 encryption/decryption 执行以下操作。

>>> 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()