我正在使用 PyCrypto 使用 RSA 实现文件加密。
我知道这有点不对,首先是因为 RSA 非常慢,其次是因为 PyCrypto RSA 只能加密 128 个字符,因此您必须将文件分解为 128 个字符块。
这是到目前为止的代码:
from Crypto.PublicKey import RSA
file_to_encrypt = open('my_file.ext', 'rb').read()
pub_key = open('my_pub_key.pem', 'rb').read()
o = RSA.importKey(pub_key)
to_join = []
step = 0
while 1:
# Read 128 characters at a time.
s = file_to_encrypt[step*128:(step+1)*128]
if not s: break
# Encrypt with RSA and append the result to list.
# RSA encryption returns a tuple containing 1 string, so i fetch the string.
to_join.append(o.encrypt(s, 0)[0])
step += 1
# Join the results.
# I hope the \r\r\r sequence won't appear in the encrypted result,
# when i explode the string back for decryption.
encrypted = '\r\r\r'.join(to_join)
# Write the encrypted file.
open('encrypted_file.ext', 'wb').write(encrypted)
所以我的问题是:有没有更好的方法在文件上使用私钥/公钥加密?
我听说过 Mcrypt 和 OpenSSL,但我不知道它们是否可以加密文件。