redcrow
redcrow

Reputation: 1823

Cryptodome raises "RSA key format is not supported"

I've just written a few lines of code as example of file encryption/decryption using asymmetric crypthography (RSA). Nevertheless, I always receive the "RSA key format is not supported" error as it imports the public key. I think it's something related to encoding, but I've already tried to import that as "string" instead of "bytes" as well as replacing new lines with "\n". The keys are in PEM format.

from Cryptodome.PublicKey import RSA
from Cryptodome.Cipher import PKCS1_OAEP

def encrypt(plain_content, file_publickey):
    with open(file_publickey, 'rb') as f:
        print(f.read())
        public_key = RSA.importKey(f.read())
        
    rsa_cipher = PKCS1.OAEP.new(public_key)
    return rsa_cipher.encrypt(plain_content.encode())
    

def decrypt(encrypted_content, file_privatekey):
    with open(file_privatekey, 'rb') as f:
        print(f.read())
        private_key = RSA.importKey(f.read())
        
    rsa_cipher = PKCS1_OAEP.new(private_key)
    return rsa_cipher.decrypt(encrypted_content)
    

def main():
    key = RSA.generate(4096)
    with open('public_key.pem', 'wb') as f:
        f.write(key.publickey().exportKey('PEM'))
    with open('private_key.pem', 'wb') as f:
        f.write(key.exportKey('PEM'))
    try:
        with open('test.pdf','rb') as fin:
            cipher_content = encrypt(fin.read(), 'public_key.pem')
            with open('test_enc.pdf','rw') as fout:
                fout.write(cipher_content)
        
        with open('test_enc.pdf','rb') as fin:
            decrypted_content = decrypt(fin.read(), 'private_key.pem')
            with open('test_dec.pdf','rb') as fout:
                fout.write(decrypted_content)
        
    except Exception as e:
        print(e)
    
if __name__ == "__main__":
    main()

This is the last public key generated by the code (I paste it below as example):

-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArMQMiEVSQk+TJMEBmVh1
DknyDELcS0Q3K0qtolUuIh5ZQzGkmQ3O7JCQmuhUtEOVBBWiyIAxyjvoLsTeOEEg
DUZ8Pn/UBV0rVMhZNFzVrquaHNE142VOHO3RKNjt8kp+FnfNzmlXnOXRRTKF/81W
Mo4315vZIHuhiLwfzH1oamKJJl4FRWe6b0Gofk6NE/pnCkywewXC+MIy/CvQhbqa
eTBUhERepa7DxOXQrpqSDwPn7NAnnpvsPXVzYTvrDdtH7v/+E9c6e3qnm6y7i2cc
7Ezlfdxpbkr8Fjqrpd4x3hdQlvoXTpgKo6NLiO+kJH2p8oADlAHpBjyHUeGwCkD6
ss9Ri+zk1O3U2nOzG+5MDQhexU/Q/TXNh0ZalfNJgIlcQFzssnQ/mJx1X68iaVLh
J5UW6j4k1UxCnYAopKf5q4av/zkOxecTFAHuzVFjV6teYLb86wTHo1R5osMvKnpH
hR2bpzVbVEKHYSRiToyqEFIMBC8QjfqvwprnJMCQglXLx4dbThiJ+w8w01u/nJtS
gxnkj4HkHN1GWidsIAPPedCubQS3KxEZMPIW9O+HXXq0RdvY0Zz/rOJzsuY6RY0B
vX6L8buwbkemXRmM+NC+d9rL0Ak+LrZ+nL4N7/N1v08oD47xUH5WTYKEX2UCif/F
KVggkFk8f3NePn6a7jOrzy8CAwEAAQ==
-----END PUBLIC KEY-----

Below the public key "print" and the error:

b'-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArMQMiEVSQk+TJMEBmVh1\nDknyDELcS0Q3K0qtolUuIh5ZQzGkmQ3O7JCQmuhUtEOVBBWiyIAxyjvoLsTeOEEg\nDUZ8Pn/UBV0rVMhZNFzVrquaHNE142VOHO3RKNjt8kp+FnfNzmlXnOXRRTKF/81W\nMo4315vZIHuhiLwfzH1oamKJJl4FRWe6b0Gofk6NE/pnCkywewXC+MIy/CvQhbqa\neTBUhERepa7DxOXQrpqSDwPn7NAnnpvsPXVzYTvrDdtH7v/+E9c6e3qnm6y7i2cc\n7Ezlfdxpbkr8Fjqrpd4x3hdQlvoXTpgKo6NLiO+kJH2p8oADlAHpBjyHUeGwCkD6\nss9Ri+zk1O3U2nOzG+5MDQhexU/Q/TXNh0ZalfNJgIlcQFzssnQ/mJx1X68iaVLh\nJ5UW6j4k1UxCnYAopKf5q4av/zkOxecTFAHuzVFjV6teYLb86wTHo1R5osMvKnpH\nhR2bpzVbVEKHYSRiToyqEFIMBC8QjfqvwprnJMCQglXLx4dbThiJ+w8w01u/nJtS\ngxnkj4HkHN1GWidsIAPPedCubQS3KxEZMPIW9O+HXXq0RdvY0Zz/rOJzsuY6RY0B\nvX6L8buwbkemXRmM+NC+d9rL0Ak+LrZ+nL4N7/N1v08oD47xUH5WTYKEX2UCif/F\nKVggkFk8f3NePn6a7jOrzy8CAwEAAQ==\n-----END PUBLIC KEY-----'
RSA key format is not supported

Upvotes: 0

Views: 151

Answers (0)

Related Questions