我已經使用pycrypto模塊,用於加密和解密與RSA密鑰對和算法。問題是,當我嘗試加密大文件(文本文件10KB)讀取文件和加密它,當我把32字節的塊大小在pycrypto中用RSA解密大文件?
>>> f = open('10kb','rb')
>>> p = open('enc','wb')
>>> while True:
data = f.read(32)
if not data:
break
enc_data = public_key.encrypt(data,32)
p.write(enc_data[0])
p.close()
f.close()
它給人的輸出:
128
128
.......and the many 128 blocks it is writing
當我嘗試解密加密的文件,我需要128字節塊讀它,從而給回32個字節的塊,
>>> f = open('enc','rb')
>>> p = open('dec','wb')
>>> while True:
data = f.read(128)
if not data:
break
dec_data = private_key.decrypt(data)
p.write(dec_data)
p.close()
f.close()
這是給輸出:
32
32
.....so many 32 byte blocks it is decrypting, then
128
128
128
128
Traceback (most recent call last):
File "<pyshell#251>", line 5, in <module>
enc_data = private_key.decrypt(data)
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py", line 174, in decrypt
return pubkey.pubkey.decrypt(self, ciphertext)
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/pubkey.py", line 93, in decrypt
plaintext=self._decrypt(ciphertext)
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py", line 237, in _decrypt
cp = self.key._blind(ciphertext, r)
ValueError: Message too large
要輸出塊大小爲32的點,它是正確的解密,但是它以128開頭,它搞砸了。爲什麼它說消息大小太大?有沒有更好更快的方法來解密使用pycrypto模塊的大文本文件?
在這種「塊模式」下,不會爲RSA加密大文件。這不是非常安全和可怕的緩慢。改爲使用[混合加密](https://en.wikipedia.org/wiki/Hybrid_cryptosystem)。 –
如何在pycrypto中做到這一點? –
對不起,對我來說或多或少的OT點:我不知道prcrypto。是否將prcrypto限制爲處理32或128位等非常小的塊?如果RSA模數是1024比特,我無法想象這樣的小塊是用它來單獨加密的。如果您碰巧有時間,可以在s13.zetaboards.com/Crypto/topic/7234475/1/中嘗試使用我的Python代碼(請參閱Ex.3,它使用RSA處理模塊大小的塊塊密碼意義上的塊鏈接和認證),並告訴我你對它的評價。 –