Search code examples
pythonencryptioncryptographyprivate-keypublic-key

Asymmetric cryptography - Plaintext size error


I’m trying to encrypt small data using asymmetric cryptography with python. I'm currently using M2Crypto to generate 1024 bit private/public key pair.

After using different python libraries, such has M2Crypto and Pycrypto (with several variations on it), I'm having plaintext size problems: ValueError: Plaintext is too long. This happens because I'm trying to encrypt the data and after that encrypting that last encryption (encryption over encryption), e.g.:

Encryption: EKpuuser(EKprown(Data)) -> EData

puser: Public key user, prown: Private key (data) owner

Decryption: DKpruser(DKpuown(EData)) -> Data

pruser: Private key user, puown: Public key (data) owner

I have tried many solutions that I've found around the web, but the only one that helped me to pass this problem was using signatures before doing encryption:

ciphertext = 'xpto'
m_EOi = hashlib.sha1()
m_EOi.update(ciphertext_EOi)
sig_EOi = (m_EOi.hexdigest())

But this solution isn't what I need, because after I used it and encrypt the signature (and encrypt the encryption), then do the decryption, can't decrypt the signature, so I can't get to the initial message.

Edited:

I already have done something like e.g.:

BLOCK_SIZE = 32 
PADDING = '{' 
message = 'today' 
key = 'aaaaaaaaaa123456' 
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING 
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) cipher = AES.new(key) 
encoded = EncodeAES(cipher, message)

key = 123 
h1 = SHA256.new() 
h1.update(key) 
key1 = h1.digest()[0:16] 
iv1 = Random.new().read(16) 
cipher1 = AES.new(key1, AES.MODE_CFB, iv1) 
criptogram1 = iv1 + cipher1.encrypt(data1)

But I allways have the plaintext size problem.


Solution

  • After more research I've managed to find something that helped me. It isn't 100% what I was looking for (related to the plaintext size error) but helps me in a way that I use signatures the go around the problem. Here is the link were I did find out the information:

    http://e1ven.com/2011/04/06/how-to-use-m2crypto-tutorial