Ver Mensaje Individual
  #168 (permalink)  
Antiguo 24/12/2003, 20:37
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
170.- Contraseñas seguras en javascript

P: ¿Como puedo hacer una contraseña segura para mi web?

R: Existe un metodo inventado, se llama md5, y convierte una cadena (por muy larga que sea) a una nueva codificada de codigo hexadecimal de una determinada longitud. Lo bueno es que dos cadenas iguales generan la misma codificacion y no existen (o eso dicen xD) dos cadenas diferentes que se codifiquen igual. El codigo para ocultar claves os lo dejo, hacer lo que querais con él.



Código PHP:
// ******************************************************************************
// * md5.js
// *
// * A JavaScript implementation derived from the RSA Data Security, Inc. MD5
// * Message-Digest Algorithm. See [url]http://cw.oaktree.co.uk/site/legal.html[/url] for
// * details.
// *
// * Copyright (C) Paul Johnston 1999 - 2000. Distributed under the LGPL.
// *****************************************************************************/

/* to convert strings to a list of ascii values */
var sAscii " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var sAscii sAscii "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";

/* convert integer to hex string */
var sHex "0123456789ABCDEF";
function 
hex(i)
{
  
"";
  for(
0<= 3j++)
  {
    
+= sHex.charAt((>> (4)) & 0x0F) +
         
sHex.charAt((>> (8)) & 0x0F);
  }
  return 
h;
}

/* add, handling overflows correctly */
function add(xy)
{
  return ((
x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^ (y&0x80000000);
}

/* MD5 rounds functions */
function R1(ABCDXST)
{
  
add(add(A, (C) | ((~B) & D)), add(XT));
  return 
add((<< S) | (>>> (32 S)), B);
}

function 
R2(ABCDXST)
{
  
add(add(A, (D) | (& (~D))), add(XT));
  return 
add((<< S) | (>>> (32 S)), B);
}

function 
R3(ABCDXST)
{
  
add(add(AD), add(XT));
  return 
add((<< S) | (>>> (32 S)), B);
}

function 
R4(ABCDXST)
{
  
add(add(A^ (| (~D))), add(XT));
  return 
add((<< S) | (>>> (32 S)), B);
}

/* main entry point */
function calcMD5(sInp) {

  
/* Calculate length in machine words, including padding */
  
wLen = (((sInp.length 8) >> 6) + 1) << 4;
  var 
= new Array(wLen);

  
/* Convert string to array of words */
  
4;
  for (
0; (4) < sInp.lengthi++)
  {
    
X[i] = 0;
    for (
0; (4) && ((4) < sInp.length); j++)
    {
      
X[i] += (sAscii.indexOf(sInp.charAt((4) + j)) + 32) << (8);
    }
  }

  
/* Append padding bits and length */
  
if (== 4)
  {
    
X[i++] = 0x80;
  }
  else
  {
    
X[1] += 0x80 << (8);
  }
  for(; 
wLeni++) { X[i] = 0; }
  
X[wLen 2] = sInp.length 8;

  
/* hard coded initial values */
  
0x67452301;
  
0xefcdab89;
  
0x98badcfe;
  
0x10325476;

  
/* Process each 16 word block in turn */
  
for (0wLen+= 16) {
    
aO a;
    
bO b;
    
cO c;
    dO = 
d;

    
R1(abcdX[i0], 0xd76aa478);
    
R1(dabcX[i1], 120xe8c7b756);
    
R1(cdabX[i2], 170x242070db);
    
R1(bcdaX[i3], 220xc1bdceee);
    
R1(abcdX[i4], 0xf57c0faf);
    
R1(dabcX[i5], 120x4787c62a);
    
R1(cdabX[i6], 170xa8304613);
    
R1(bcdaX[i7], 220xfd469501);
    
R1(abcdX[i8], 0x698098d8);
    
R1(dabcX[i9], 120x8b44f7af);
    
R1(cdabX[i+10], 170xffff5bb1);
    
R1(bcdaX[i+11], 220x895cd7be);
    
R1(abcdX[i+12], 0x6b901122);
    
R1(dabcX[i+13], 120xfd987193);
    
R1(cdabX[i+14], 170xa679438e);
    
R1(bcdaX[i+15], 220x49b40821);

    
R2(abcdX[i1], 0xf61e2562);
    
R2(dabcX[i6], 0xc040b340);
    
R2(cdabX[i+11], 140x265e5a51);
    
R2(bcdaX[i0], 200xe9b6c7aa);
    
R2(abcdX[i5], 0xd62f105d);
    
R2(dabcX[i+10], ,  0x2441453);
    
R2(cdabX[i+15], 140xd8a1e681);
    
R2(bcdaX[i4], 200xe7d3fbc8);
    
R2(abcdX[i9], 0x21e1cde6);
    
R2(dabcX[i+14], 0xc33707d6);
    
R2(cdabX[i3], 140xf4d50d87);
    
R2(bcdaX[i8], 200x455a14ed);
    
R2(abcdX[i+13], 0xa9e3e905);
    
R2(dabcX[i2], 0xfcefa3f8);
    
R2(cdabX[i7], 140x676f02d9);
    
R2(bcdaX[i+12], 200x8d2a4c8a);

    
R3(abcdX[i5], 0xfffa3942);
    
R3(dabcX[i8], 110x8771f681);
    
R3(cdabX[i+11], 160x6d9d6122);
    
R3(bcdaX[i+14], 230xfde5380c);
    
R3(abcdX[i1], 0xa4beea44);
    
R3(dabcX[i4], 110x4bdecfa9);
    
R3(cdabX[i7], 160xf6bb4b60);
    
R3(bcdaX[i+10], 230xbebfbc70);
    
R3(abcdX[i+13], 0x289b7ec6);
    
R3(dabcX[i0], 110xeaa127fa);
    
R3(cdabX[i3], 160xd4ef3085);
    
R3(bcdaX[i6], 23,  0x4881d05);
    
R3(abcdX[i9], 0xd9d4d039);
    
R3(dabcX[i+12], 110xe6db99e5);
    
R3(cdabX[i+15], 160x1fa27cf8);
    
R3(bcdaX[i2], 230xc4ac5665);

    
R4(abcdX[i0], 0xf4292244);
    
R4(dabcX[i7], 100x432aff97);
    
R4(cdabX[i+14], 150xab9423a7);
    
R4(bcdaX[i5], 210xfc93a039);
    
R4(abcdX[i+12], 0x655b59c3);
    
R4(dabcX[i3], 100x8f0ccc92);
    
R4(cdabX[i+10], 150xffeff47d);
    
R4(bcdaX[i1], 210x85845dd1);
    
R4(abcdX[i8], 0x6fa87e4f);
    
R4(dabcX[i+15], 100xfe2ce6e0);
    
R4(cdabX[i6], 150xa3014314);
    
R4(bcdaX[i+13], 210x4e0811a1);
    
R4(abcdX[i4], 0xf7537e82);
    
R4(dabcX[i+11], 100xbd3af235);
    
R4(cdabX[i2], 150x2ad7d2bb);
    
R4(bcdaX[i9], 210xeb86d391);

    
add(aaO);
    
add(bbO);
    
add(ccO);
    
add(d, dO);
  }
  return 
hex(a) + hex(b) + hex(c) + hex(d);

__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.

Última edición por derkenuke; 04/03/2004 a las 14:50