Шифрование файлов изображений в python3 с использованием алгоритма RSA - PullRequest
0 голосов
/ 03 декабря 2018

Я шифрую изображения в python3 с помощью алгоритма RSA, но получаю некоторую ошибку при запуске кода;ошибка:

 File "encrypt_blob.py", line 59, in <module>
 encrypted_blob = encrypt_blob(unencrypted_blob, public_key)
 File "encrypt_blob.py", line 37, in encrypt_blob
 chunk += " " * (chunk_size - len(chunk))
 TypeError: can't concat str to bytes

Я сгенерировал ключи ранее и использую их в этом скрипте для шифрования файла изображения.Но я получаю эту ошибку.так как я нашел этот код в блоге, я думаю, что код написан на python2, но я использую python3, и я не знаю, как решить проблему

Код:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import zlib
import base64

def encrypt_blob(blob, public_key):
  #Import the Public Key and use for encryption using PKCS1_OAEP
  rsa_key = RSA.importKey(public_key)
  rsa_key = PKCS1_OAEP.new(rsa_key)

  #compress the data first
  blob = zlib.compress(blob)

  #In determining the chunk size, determine the private key length used in bytes
#and subtract 42 bytes (when using PKCS1_OAEP). The data will be in encrypted
#in chunks
chunk_size = 470
print(type(chunk_size))
offset = 0
end_loop = False
encrypted =  ""
print(type(encrypted))

while not end_loop:
    #The chunk
    chunk = (blob[offset:offset + chunk_size])

    #If the data chunk is less then the chunk size, then we need to add
    #padding with " ". This indicates the we reached the end of the file
    #so we end loop here
    if len(chunk) % chunk_size != 0:
        end_loop = True
        chunk += " " * (chunk_size - len(chunk))

    #Append the encrypted chunk to the overall encrypted file
    encrypted += (rsa_key.encrypt(chunk))

    #Increase the offset by chunk size
    offset += chunk_size

#Base 64 encode the encrypted file
return base64.b64encode(encrypted)

#Use the public key for encryption
fd = open("public_key.pem", "rb")
public_key = fd.read()
fd.close()

#Our candidate file to be encrypted
fd = open("img.jpg", "rb")
unencrypted_blob = fd.read()
fd.close()

encrypted_blob = encrypt_blob(unencrypted_blob, public_key)

#Write the encrypted contents to a file
fd = open("encrypted_img.jpg", "wb")
fd.write(encrypted_blob)
fd.close()

Ждем предложений.Спасибо.

...