我正在使用PyCrypto實現使用RSA進行文件加密。在Python中使用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,但我不知道他們是否可以加密文件。
您應該使用像AES這樣的對稱密碼來加密文件,然後使用RSA來加密AES密鑰。 – 2011-06-10 17:28:05
@Petey B:我希望我能喜歡那個評論100次。 – vcsjones 2011-06-10 17:28:58
@Petey:謝謝,我知道這件事,但我想要實現像gpg4win這樣的東西。 – 2011-06-10 17:31:32