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

时间:2018-01-18 07:21:48

标签: python security encryption cryptography pycrypto

我已经阅读了很多关于这个主题的内容,但我真的不明白我应该如何实现这个。我想加密用户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)

1 个答案:

答案 0 :(得分:0)

首先,密码验证(基于密码)和加密(基于密钥)完全不同。基本上,如果要实现加密/解密,则必须能够在用户之间交换密钥。如果您计划为此目的使用公钥/私钥,则始终使用私钥解密而不加密。如果要将密码映射到私钥,则应使用自己的密码来解密不加密的邮件。

如果您仍希望使用此类机制的密码,则可以将私钥映射到密码,并间接使用此密码每次解密邮件。并且,所有其他用户应该知道映射到该用户的公钥。

如果您打算如前所述使用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()