Pregunta

Para interactuar con una fuente de datos externa, necesito pasar una clave de seguridad sucesiva con el hash MD5 (todos los días necesitamos generar una nueva clave hash MD5).

Estoy cambiando si hacerlo o no cada vez que llamemos a la fuente externa o no. Necesito tener una cadena de aproximadamente 10 caracteres para la fuente.

Es para un sitio ASP.NET (C # / .NET 3.5) y el feed se usa en casi todas las páginas. ¿Lo mejor sería generar el hash una vez al día y luego almacenarlo en el caché de la aplicación y tomar el golpe de memoria o generarlo en cada solicitud?

¿Fue útil?

Solución

La única base aceptable para las optimizaciones son los datos. Mida la generación de esta línea y mide la memoria caché.

Mi estación de trabajo de gama alta puede calcular más de 100 k hashes de un segmento de datos de 10 bytes en un segundo. No obtendré ningún beneficio al cachear esto para mí y apuesto a que es lo mismo para ti.

Otros consejos

Genera algunos datos de muestra. Bueno, mucho de eso. Calcule el MD5 de los datos de muestra. Medir el tiempo que lleva. Decide por ti mismo.

Si será el mismo para un caché de un día determinado, podría ser una idea. Incluso podría configurar el caché para que sea de 24 horas y escribir código para regenerar el hash cuando el caché caduque

¡Calcule la complejidad temporal del algoritmo!

Mira el siguiente código:

   public string GetMD5Hash(string input)
    {
        System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
        bs = x.ComputeHash(bs);
        System.Text.StringBuilder s = new System.Text.StringBuilder();
        foreach (byte b in bs)
        {
            s.Append(b.ToString("x2").ToLower());
        }
        string password = s.ToString();
        return password;
    }

Si tuviéramos que calcular la complejidad del tiempo, obtendríamos T = 11 + n * 2, sin embargo, esto es solo " lo que vemos " es decir, ToLower podría hacer un trabajo pesado que no sabemos. Pero desde este punto podemos ver que este algoritmo es O (n) en todos los casos. El tiempo del significado crece a medida que los datos crecen.

También para solucionar el problema del caché, prefiero tener mi " pesado " trabaje en la memoria ya que la memoria es menos costosa en comparación con el uso de la CPU.

El uso de la memoria caché Asp.Net es muy fácil, por lo que no veo por qué no debes guardar la clave.

El almacenamiento de la clave en el caché puede incluso ahorrar algo de memoria, ya que puede reutilizarla en lugar de crear una nueva para cada solicitud.

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