Guest User

Untitled

a guest
Jun 19th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.80 KB | None | 0 0
  1. public static String security(string username, string password)
  2.         {
  3.             /*
  4.              * Si no tienes ganas de saber cómo saco la clave única, no leas esto.
  5.              * En serio, tú piensa que las saco de las tripas de un dragón, es más creíble.
  6.              *
  7.              * Tú mismo.
  8.              * Este método combina de una forma bastante absurda e impredecible
  9.              * el username y el password, y devuelve una clave única de 8 caracteres.
  10.              * Entre otras cosas, combino ambas variables,
  11.              * sumo o resto (aleatoriamente) una constante a cada char varias veces
  12.              * y si en algún momento valen menos de 48 (0) o más de 122 (z)
  13.              * les doy el otro valor (122 para 48 y 48 para 122), y creo una Seed para el random
  14.              * a partir del resto de la suma de longitudes de ambas cadenas entre la del username
  15.              * para barajear el resultado final.
  16.              * Luego cojo los 8 primeros caracteres
  17.              * (entre 48 y 122 hay algunos símbolos, que cambio por caracteres válidos aleatorios)
  18.              * y el método devuelve esa clave.
  19.              *
  20.              * Lo divertido es que como la seed se forma usando sólo user y pass
  21.              * Aunque utilice aleatorios, si meto dos strings siempre devuelve la misma clave.
  22.              *
  23.              * Nadie que no haya leído esto antes podría descifrar el método para sacar esta clave.
  24.              * Nadie en su sano juicio, al menos.
  25.              */
  26.  
  27.             String validchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789";
  28.             char[] security = new char[username.Length + password.Length];
  29.             Random r = new Random(security.Length % (username.Length+1));
  30.             Boolean clock = true;
  31.             int constante;
  32.             try
  33.             {
  34.                 constante = (((security.Length + 1) % (password.Length + 1) + 1) * r.Next(15, 30)) % ((security.Length + 1) % (username.Length + 1)) + 1;
  35.             }
  36.             catch (DivideByZeroException)
  37.             {
  38.                 constante = 24;
  39.             }
  40.             for (int i = 0; i < username.Length; i++)
  41.             {
  42.                 security[i] = username[i];
  43.             }
  44.             for (int i = 0; i < password.Length; i++)
  45.             {
  46.                 security[i + username.Length] = password[i];
  47.             }
  48.             for (int i = 0; i < security.Length; i++)
  49.             {
  50.                 for (int e = 0; e < i; e++)
  51.                 {
  52.                     int aux = security[e];
  53.                     if (clock)
  54.                     {
  55.                         aux += constante;
  56.                     } else {
  57.                         aux -= constante;
  58.                     }
  59.                     if (aux < 48)
  60.                     {
  61.                         aux = 122;
  62.                     }
  63.                     else if (aux > 122)
  64.                     {
  65.                         aux = 48;
  66.                     }
  67.                     if (r.Next(0, 1) == 0)
  68.                     {
  69.                         clock = false;
  70.                     }
  71.                     else
  72.                     {
  73.                         clock = true;
  74.                     }
  75.                     char aux2 = Convert.ToChar(aux);
  76.                     security[e] = security[i];
  77.                     security[i] = aux2;
  78.                 }
  79.             }
  80.             char[] security2 = new char[security.Length];
  81.             for (int i = 0; i < security2.Length; i++)
  82.             {
  83.                 security2[i] = ' ';
  84.             }
  85.             for (int i = 0; i < security.Length; i++)
  86.             {
  87.                 char y = security[i];
  88.                 int random = 0;
  89.                 do
  90.                 {
  91.                     random = r.Next(0, security.Length);    
  92.                 } while (security2[random] != ' ');
  93.                 security2[random] = y;
  94.             }
  95.             String x = "";
  96.             try
  97.             {
  98.                 for (int i = 0; x.Length<8; i++)
  99.                 {
  100.                     if (validchars.Contains(security2[i]))
  101.                     {
  102.                         if (!x.Contains(security2[i]))
  103.                         {
  104.                             x += security2[i];
  105.                         }
  106.                     }
  107.                     else
  108.                     {
  109.                         x += validchars[r.Next(0, validchars.Length)];
  110.                     }
  111.                     if (i > 100) throw new Exception();
  112.                 }
  113.             }
  114.                 catch (Exception e)
  115.                 {
  116.                     for (int s = x.Length; s < 8; s++)
  117.                     {
  118.                         x += validchars[r.Next(0, validchars.Length)];
  119.                     }
  120.                 }
  121.             return x;
  122.         }
Add Comment
Please, Sign In to add comment