TL; DR: ¿Cuánto puede una función (como la que se muestra a continuación) modificar una cadena inicialmente aleatoria antes de que esa cadena se vuelva inútil como sal para el hashing de contraseñas? ¿Hay una regla general?
# Function generates a random string of characters using urandom(), then converts each
# character to its hexadecimal equivalent, and then converts *those* digits back to characters.
# Each hexadecimal character-string is then concatenated into a super-string, excluding the '0x'
# prefixes. The function returns the first 64 characters of the super-string.
def hex_salt():
raw_salt = os.urandom(500)
hex_salt = ""
trimmed_salt = ""
for i in range(len(raw_salt)):
dec_num = ord(raw_salt[i])
hex_substring = str(hex(dec_num))
hex_salt += hex_substring
j=0
while(len(trimmed_salt) < 64):
if (hex_salt[j]=='0' and hex_salt[j+1]=='x') or (hex_salt[j]=='x'):
j+=1
continue
trimmed_salt+=hex_salt[j]
j+=1
return trimmed_salt
La razón por la que pregunto es que estoy usando el módulo hashlib incorporado de python para configurar un servicio de inicio de sesión para mi sitio web. Debido a que los caracteres hexadecimales son más fáciles de tratar, quiero crear una sal aleatoria (usando os.urandom) y derivar una sal aleatoria de ella que solo contenga caracteres hexadecimales. Este es mi primer post aquí, así que me disculpo por los pecados que sin duda he cometido.