1
我試圖使用AES加密對文件中的數據進行加密,然後使用RSA加密AES密鑰。但是當我嘗試從文件中讀取密鑰時,它會遇到錯誤「RSA binascii.Error:不正確的填充」。Python:PyCrypto RSA binascii.Error:從文件中讀取密鑰時填充不正確
Traceback (most recent call last):
File "C:/Users/dbane_000/PycharmProjects/RSE/RSA.py", line 33, in <module>
key=RSA.importKey(f.read())
File "C:\Python27\lib\site-packages\Crypto\PublicKey\RSA.py", line 660, in importKey
der = binascii.a2b_base64(b('').join(lines[1:-1]))
binascii.Error: Incorrect padding
錯誤並不總是出現,但可能每五次運行一次該代碼。可能是什麼原因?
from Crypto.Cipher import AES
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto import Random
import rsa
import base64
import os
BLOCK_SIZE = 32
PADDING = '{'
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
random_generator = Random.new().read
rsakey = RSA.generate(1024, random_generator)
f=open('key.pem','w')
cipher = PKCS1_OAEP.new(rsakey.publickey())
f.write(rsakey.exportKey("PEM"))
f.write(rsakey.publickey().exportKey("PEM"))
f.close()
f=open('key.pem','r')
key=RSA.importKey(f.read())
pubkey=key.publickey()
f.close()
secret = os.urandom(BLOCK_SIZE)
print secret
crypto =pubkey.encrypt(secret, 32)
secret =key.decrypt(crypto)
print crypto
print secret
cipher = AES.new(secret)
# encode a string
f=open('plaintext.txt','r')
plaintext=f.read()
f.close()
encoded = EncodeAES(cipher, plaintext)
print 'Encrypted string:', encoded
f=open('cipher_data.txt','w')
f.write(encoded)
f.close()
# decode the encoded string
decoded = DecodeAES(cipher, encoded)
print 'Decrypted string:', decoded
f=open('plaintext.txt','r')
plaintext=f.read()
f.close()
f=open('decrypted.txt','w')
f.write(decoded)
f.close()
你不是以二進制模式打開你的文件... –
@MaartenBodewes以二進制模式打開文件這應該是代碼正確嗎? f =開放('key.pem','rb')。我嘗試過但仍然沒有區別。 – daipayan
嗯。通常公鑰部分包含在私鑰中。你是否嘗試不明確導出公鑰?對於PEM文本模式可能是可以的,但肯定不適用於密文。 –