Pregunta

Estoy un poco confundido de que el argumento de las funciones criptográficas es una cadena. Debería simplemente envolver los argumentos sin cadena con str (), por ejemplo,

hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))

(ignore por el momento que random.randbits () podría no ser criptográficamente bueno). edición: ¡Me doy cuenta de que el ejemplo de hmac es una tontería porque no estoy almacenando la clave en ningún lugar!

¿Fue útil?

Solución

Bueno, generalmente las funciones hash (y las funciones criptográficas en general) funcionan en bytes. Las cadenas de Python son básicamente cadenas de bytes. Si desea calcular el hash de algún objeto, debe convertirlo en una representación de cadena. Solo asegúrese de aplicar la misma operación más adelante si desea verificar si el hash es correcto. Y asegúrese de que la representación de su cadena no contenga ningún cambio de información que no desee verificar.

Editar: debido a una solicitud popular, un breve recordatorio de que las cadenas Unicode de Python no contienen bytes sino puntos de código Unicode. Cada punto de código Unicode contiene múltiples bytes (2 o 4, según cómo se compiló el intérprete de Python). Las cadenas de Python solo contienen bytes. Por lo tanto, las cadenas de Python (tipo str ) son el tipo más similar a una matriz de bytes.

Otros consejos

Puedes.

Sin embargo, para el HMAC, realmente desea almacenar la clave en algún lugar. Sin la clave, no hay forma de verificar el valor de hash más adelante. :-)

Ah, y Sha256 no es realmente una función criptográfica de potencia industrial (aunque desafortunadamente se usa con bastante frecuencia en muchos sitios). No es una forma real de proteger contraseñas u otros datos críticos, pero es más que suficiente para generar tokens temporales

Edit: Como se mencionó, Sha256 necesita al menos un poco de sal. Sin sal, Sha256 tiene una barrera baja para ser resquebrajado con un ataque de diccionario (en el tiempo) y también hay muchas tablas Rainbow para usar. Personalmente, no usaría nada menos que Blowfish para las contraseñas (pero eso es porque soy paranoico)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top