En pocas palabras, desea maximizar la cantidad de entropía para una longitud de datos determinada, al realizar la mayoría de las tareas criptográficas.
Tiene (a lo sumo) 16 bytes de entropía en su GUID, probablemente menos (algunos de los bits son deterministas), pero podemos ignorar ese detalle para la discusión actual. Cuando se utiliza la representación del byte [] del GUID como sal, tiene 16 bytes de datos. Eso es como máximo 16 bytes de entropía / 16 bytes de datos = 1 byte de entropía por byte de datos, asumiendo un GUID completamente aleatorio. Ahora suponga que utiliza la representación de cadena. Eso es 36 bytes de datos, pero aún como máximo 16 bytes de entropía. Eso da como resultado menos de la mitad de la entropía por byte de datos (aproximadamente una relación de entropía / datos de 0.44 en comparación con el byte compacto []), que es problemático para algunos algoritmos de hashing.
¿Cuándo podría surgir esto?
Para tomar un ejemplo artificial (justo en la parte superior de mi cabeza, realmente no recomendaría hacerlo), considere bcrypt. bcrypt es un algoritmo de hashing de contraseñas que, por razones técnicas, limita la contraseña a 72 bytes . Incluye su propia sal, pero supongamos, por el bien del argumento, que no confía en su sal (de nuevo, esto no es un consejo, solo un ejemplo).
Entonces, decide prefijar la contraseña del usuario con un GUID, antes de introducirla en bcrypt. Si ha usado la versión de byte [], eso acorta el límite superior efectivo en la longitud de la contraseña en 16 bytes. Por lo tanto, el usuario puede proporcionar una contraseña de 56 bytes, como máximo. Eso está bien, aún son más de 50 caracteres ASCII, que es una longitud común que usan las personas cuando tienen un administrador de contraseñas y son un poco paranoicos.
Ahora, supongamos que ha usado la versión de cadena en su lugar. Todavía tiene la misma cantidad de entropía, pero ahora consume 36 bytes que el usuario podría haber estado usando para rellenar su contraseña. Ahora están atrapados con una contraseña de 36 bytes como máximo.
Y eso es solo un ejemplo de la parte superior de mi cabeza; Estoy seguro de que hay otros casos en los que usar la versión de cadena te haría daño.