Why am I getting these errors: Typeerror: Object type <class 'str'> cannot be passed to C code

Asked

Viewed 80 times

-2

I found a code github link to code: https://gist.github.com/shinyquagsire23/0d6a5119ee7fb40de2fcfb9088168d63 but when I try to execute the code I get these messages:inserir a descrição da imagem aqui currently I have no knowledge in python, I know a little php and c#. Please if someone can explain and correct these errors or if possible rewrite the script in php or c# it would be easier to understand me. From now on I thank everyone who help, thank you very much.

2 answers

0


The problem is in the Encoding of strings that must be in bytes, if you are using python3.

In those parts

lg_deckey = b"wleldpadptmdkdnt"
lg_enckey = b"qlxnTldlsvntzl!#"
def lg_encrypt(string):
    key=lg_enckey
    plain = pad(string)
    iv = b"\x00"*AES.block_size  # <-- bytes aqui
    cipher = AES.new(key, AES.MODE_CBC, iv)
    encrypted_text = cipher.encrypt(plain.encode("utf8"))   # <-- encode aqui
    return base64.b64encode(encrypted_text).replace(b"+", b"m").replace(b"/", b"f")     # <-- encode aqui

def lg_decrypt(string):
    ...

    decrypted_text = cipher.decrypt(crypted)
    return unpad(decrypted_text.decode("utf8"))     # <-- decode aqui

The complete code is here.

  • Thank you very much friend, I tested the code and it worked, thank you very much. at the moment I am studying c#, as soon as I can I will study python. Thank you very much. I’ll give you a basic study to see if I can rewrite the code in c#. Thank you very much.

-1

from Cryptodome.cifra import AES
from Cryptodome.Util import Padding 
"""
O tamanho da chave definida como 32, esta implementando 256 se o tamanho do vetor de  inicialização for igual ao
 tamanho do bloco, que é de 16 bytes.

A chave  inicial e o vetor de inicialização proposto apenas  uma letra (H), recomendavel acrescentar uma chave
mais complexa.
"""

chave = b"H" * 32
"""Chaves AES podem ter o tamanho de 128 bits (16 bytes)
                                     192 bits (24 bytes)
                                     256 bits (32 bytes) """
IV = b"H" * 16 


cifra = AES.new(chave, AES.MODE_CBC, IV)
"""objeto recebe  a chave HSC e o  modo que é CBC"""

mensagem = "Linux" # mensagem a ser utilizada

preparadamensagem  = Padding.pad(mensagem.encode(), 16)
"""Mensagem  criptografar passada para função de preenchimento a função de parte.
para garantir mais segurança foi adicionado  o tamanho da mensagem  de 16 bytes  multiplicando
"""

criptografada = cifra.encrypt(preparadamensagem )


print (criptografada)
"""resultado

Independentemente do tamanho do texto, a função 
se encarregará de dividir o texto em blocos onde cada bloco tem 16 bytes.
Pode aumentar o tamanho da mensagem em vez de 16 para 50 ou qualquer tamanho.

"""

decifra = AES.new(chave, AES.MODE_CBC, IV)
prontamensagem = decifra.decrypt(criptografada)
semcriptografia= Padding.unpad(prontamensagem, 16)

print(unpaddedcriptografada.decode()) 
"""desfazendo criptografia
  Se a mensagem já esta criptografada com uma chave segura base64 não vai 
  fazer muita diferença.
"""

Browser other questions tagged

You are not signed in. Login or sign up in order to post.