es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Se requiere un objeto de soporte para la API del búfer, error de sha256.

Quiero hashear algunos números de 4 dígitos
pero me da un error (se requiere un objeto que soporte la API del buffer)

Aquí está mi código

import hashlib
import itertools as it

number=[0,1,2,3,4,5,6,7,8,9]
code = hashlib.sha256()
passwords = list(it.permutations(number, 4))
# hpass es la contraseña hasheada
for hpass in passwords :
    code.update(passwords)

    print(hpass)

y la salida es

~~~
Traceback (most recent call last):
File "c:\Users\Parsa\Desktop\project\Untitled-2.py", line 11, in <module>
code.update(passwords)
TypeError: se requiere un objeto que soporte la API del buffer
~~~

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código dado es que el método update() del módulo hashlib requiere un objeto que admita la API de buffer como argumento. Aquí estamos pasando una lista de tuplas, lo cual no es admitido por el método update().

    Para resolver el error y obtener el hash de algunos números de 4 dígitos, podemos convertir la tupla a una cadena utilizando el método join() y luego codificarla a bytes utilizando el método encode(). Aquí está el código actualizado:

    import hashlib
    import itertools as it
    
    number=[0,1,2,3,4,5,6,7,8,9]
    code = hashlib.sha256()
    passwords = list(it.permutations(number, 4))
    
    for hpass in passwords:
        hpass_str = "".join(str(digit) for digit in hpass)
        hpass_bytes = hpass_str.encode('utf-8')
        code.update(hpass_bytes)
        print(hpass, code.hexdigest())
    

    En el código actualizado, estamos convirtiendo cada tupla en la lista de contraseñas a una cadena y luego codificándola a bytes. Finalmente, podemos pasar los bytes codificados al método update() y imprimir el valor hash utilizando el método hexdigest().

Comments are closed.