Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static String security(string username, string password)
- {
- /*
- * Si no tienes ganas de saber cómo saco la clave única, no leas esto.
- * En serio, tú piensa que las saco de las tripas de un dragón, es más creíble.
- *
- * Tú mismo.
- * Este método combina de una forma bastante absurda e impredecible
- * el username y el password, y devuelve una clave única de 8 caracteres.
- * Entre otras cosas, combino ambas variables,
- * sumo o resto (aleatoriamente) una constante a cada char varias veces
- * y si en algún momento valen menos de 48 (0) o más de 122 (z)
- * les doy el otro valor (122 para 48 y 48 para 122), y creo una Seed para el random
- * a partir del resto de la suma de longitudes de ambas cadenas entre la del username
- * para barajear el resultado final.
- * Luego cojo los 8 primeros caracteres
- * (entre 48 y 122 hay algunos símbolos, que cambio por caracteres válidos aleatorios)
- * y el método devuelve esa clave.
- *
- * Lo divertido es que como la seed se forma usando sólo user y pass
- * Aunque utilice aleatorios, si meto dos strings siempre devuelve la misma clave.
- *
- * Nadie que no haya leído esto antes podría descifrar el método para sacar esta clave.
- * Nadie en su sano juicio, al menos.
- */
- String validchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789";
- char[] security = new char[username.Length + password.Length];
- Random r = new Random(security.Length % (username.Length+1));
- Boolean clock = true;
- int constante;
- try
- {
- constante = (((security.Length + 1) % (password.Length + 1) + 1) * r.Next(15, 30)) % ((security.Length + 1) % (username.Length + 1)) + 1;
- }
- catch (DivideByZeroException)
- {
- constante = 24;
- }
- for (int i = 0; i < username.Length; i++)
- {
- security[i] = username[i];
- }
- for (int i = 0; i < password.Length; i++)
- {
- security[i + username.Length] = password[i];
- }
- for (int i = 0; i < security.Length; i++)
- {
- for (int e = 0; e < i; e++)
- {
- int aux = security[e];
- if (clock)
- {
- aux += constante;
- } else {
- aux -= constante;
- }
- if (aux < 48)
- {
- aux = 122;
- }
- else if (aux > 122)
- {
- aux = 48;
- }
- if (r.Next(0, 1) == 0)
- {
- clock = false;
- }
- else
- {
- clock = true;
- }
- char aux2 = Convert.ToChar(aux);
- security[e] = security[i];
- security[i] = aux2;
- }
- }
- char[] security2 = new char[security.Length];
- for (int i = 0; i < security2.Length; i++)
- {
- security2[i] = ' ';
- }
- for (int i = 0; i < security.Length; i++)
- {
- char y = security[i];
- int random = 0;
- do
- {
- random = r.Next(0, security.Length);
- } while (security2[random] != ' ');
- security2[random] = y;
- }
- String x = "";
- try
- {
- for (int i = 0; x.Length<8; i++)
- {
- if (validchars.Contains(security2[i]))
- {
- if (!x.Contains(security2[i]))
- {
- x += security2[i];
- }
- }
- else
- {
- x += validchars[r.Next(0, validchars.Length)];
- }
- if (i > 100) throw new Exception();
- }
- }
- catch (Exception e)
- {
- for (int s = x.Length; s < 8; s++)
- {
- x += validchars[r.Next(0, validchars.Length)];
- }
- }
- return x;
- }
Add Comment
Please, Sign In to add comment