Pregunta

He buscado por todo Google y no puedo encontrar un ejemplo de código de Scrypt de uso (para el hash de una contraseña) mediante el Cryptsharp biblioteca.

Puede usted por favor proporcione una muestra de hash de la contraseña?

¿Fue útil?

Solución

Es sólo una sola llamada así que me voy a caminar a través de los parámetros:

  1. key:este es su contraseña, utilice la codificación UTF-8 (sin marca de orden de bytes) para codificar la contraseña en una matriz de bytes;
  2. salt:una cadena de seguridad aleatoria de bytes almacenados con el resultado de la scrypt función, de 16 bytes debe ser amplio;
  3. cost:la sugerencia dada es 262144, pero puede que desee aumentar ese valor si el servidor puede manejar la carga adicional;
  4. blockSize:ver el costo, la sugerencia dada es de 8;
  5. parallel:Me gustaría que esta a 1, salvo que usted desee experimentar con multi-threading;
  6. maxThreads:en general null va a hacer muy bien;
  7. derivedKeyLength:bueno, eso depende, para contraseñas de 128 debe ser amplio, sin embargo, es poco probable que la contraseña tiene más de 128 bits de seguridad.

Se debe almacenar al menos la sal y el resultado.Puede que desee utilizar la codificación base 64 si desea almacenar como cadenas.

Yo recomendaría usted para almacenar una pieza más de información:una versión de su contraseña de claves basada en la derivación esquema (PBKDF).Por ejemplo, establecer que 1 para el uso de scrypt, utilizando la clave de codificación, la sal, el tamaño, el costo, tamaño, etc.En ese caso, usted puede actualizar su esquema más tarde (que necesita el usuario para indicar su contraseña para hacer esto, así que usted tendrá que hacer esto en línea, así que usted va a terminar encima de tener múltiples esquemas operativos al mismo tiempo).

Tenga en cuenta que puede que la cadena de PBKDF llamadas a función, así que usted podría utilizar el original PBKDF de salida y utilizarlo como entrada para la siguiente PBKDF.En caso de que el usuario no tenga que introducir la contraseña (esta sugerencia fue tomada de CodesInChaos en otra pregunta).

Otros consejos

@MAARTEBBODEWES proporciona una excelente respuesta con consejos adicionales muy sabios.Aquí hay una muestra de código con sus recomendaciones.También sugeriría leer ' Su contraseña es demasiado corta 'que muestra la importancia de usar la criptografía moderna como (en el momento de la escritura) BCIPTT o scrypt .

public string Hash(string secret, string salt)
{
    var keyBytes = Encoding.UTF8.GetBytes(secret);
    var saltBytes = Encoding.UTF8.GetBytes(salt);
    var cost = 262144;
    var blockSize = 8;
    var parallel = 1;
    var maxThreads = (int?)null;
    var derivedKeyLength = 128;

    var bytes = SCrypt.ComputeDerivedKey(keyBytes, saltBytes, cost, blockSize, parallel, maxThreads, derivedKeyLength);
    return Convert.ToBase64String(bytes);
}

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